Android 4.0 ICS SystemUI淺析——StatusBar結構分析


Android 4.0 ICS SystemUI淺析——StatusBar結構分析

分類: Android 17291人閱讀 評論(7)收藏 舉報androidsignal代碼分析iconseclipse平台

          在上一篇文章《Android 4.0 ICS SystemUI淺析——SystemUI啟動流程》中以及提到了SystemUI的組成,本文主要分析其中的StatusBar結構。

      1.布局概覽

      首先,我們通過hierarchyviewer這個工具來查看一下系統啟動后的布局情況(注:hierarchyviewer在SDK/tools目錄下,在windows環境下直接運行hierarchyviewer.bat,linux環境下終端執行./hierarchyviewer;安裝ADT插件后也可以通過Eclipse調用hierarchyviewer來查看)。如圖1.1:


圖 1.1

這里簡單的介紹一下當前界面的組件,該界面為模擬器啟動后解鎖界面。其中包含了7個組件,從上到下依次為RecentsPanel、SatusBar、StatusBarExpanded、TrackingView、Keyguard、com.android.launcher/com.android.launcher2.Launcher、com.android.systemui.ImageWallpaper。

       RecentsPanel:指的是我們長按Home鍵彈出的“最近運行程序”。如圖1.2:


圖 1.2

       SatusBar:這就是我們的主角——狀態欄。由於是剛啟動,因此沒有運行任何有通知的應用程序,如下圖1.3:


圖 1.3

        StatusBarExpanded:根據字面意思其實我們已經知道了,這實際上就是通知欄下拉時候的擴展界面。如圖1.4:


圖 1.4

注:因為模擬器實際上無法顯示出USB當前連接狀態,因此這里換用真機截圖。

       TrackingView:指的是我們將通知欄下拉以后,除開StatusBarExpanded以外的地方。如圖1.5:


圖 1.5

           Keyguard:這就是屏幕鎖,因為目前已經解鎖,因此看不到任何布局。

        com.android.launcher/com.android.launcher2.Launcher:就是我們的Launcher,如圖1.6:


圖 1.6

         com.android.systemui.ImageWallpaper:也就是壁紙,是由SystemUI里的ImageWallpaper來設置的。

       2.StatusBar之庖丁解牛

       根據前面的整體描述,相信大家已經對Android 4.0的界面有了一個整體的概念,那么接下來就切入正題——StatusBar的結構分析。對於StatusBar的分析從以下兩方面入手:首先,從界面上分析。通過hierarchyviewer來觀察StatusBar的布局結構;其次,通過代碼分析各個組件的具體實現(注:本文主要從界面進行結構分析)。

       以為后面我將會用真機進行演示,因此這里貼出真機的StatusBar結構圖以及原生的StatuBar結構圖,以進行對比。真機采用的是高通雙卡平台,在原生基礎上進行的修改,原生StatusBar的結構如圖2.1,真機StatusBar結構如圖2.2:


圖 2.1


圖 2.2(看不清楚的朋友可以點這里下載全部圖片)

          圖2.1和2.2中清晰的列出了StatusBar的結構組成,StatusBar實際上是由PhoneStatusBarView構成,而PhoneStatusBarView又細分成兩個大模塊,分別是icons和ticker兩個布局。我們知道,在通常情況下,系統左邊放置通知圖標(notificationIcons),中間放置狀態圖標(statusIcons)以及信號圖標(signal_battery_cluster),右邊放置日期(clock),ticker默認是看不見的,因此實際上我們真正看到的StatusBar是icons的布局。下面我們分別介紹這些獨立模塊的結構。

        我將StatusBar的組成部件(notificationIcons、statusIcons、signal_battery_cluster、clock、ticker)分別使用了不同的背景,這樣就能清晰直觀的看到各個布局之間的關系了(注:我使用的是高通的雙卡平台)。如圖2.3和2.4:


圖 2.3


圖 2.4

在圖2.3和圖2.4中,各個顏色代表的含義如下:

紅色:notificationIcons,通知圖標,比如我們常見的360以及QQ等等,都會在這里顯示自己的圖標;

紫色:statusIcons,狀態圖標,這里會放置系統的一些狀態圖標,比如像藍牙、鬧鍾、耳機插入等等;

綠色:signal_battery_cluster,信號以及電量圖標,這里主要放置了wifi以及手機信號和電池電量的圖標(注:沒有插入SIM卡);

黃色:clock,時鍾圖標;

藍色:ticker,通知信息圖標,當系統接收到通知后,有的通知具有通知信息,因此會通過ticker進行顯示,比如禁用360的懸浮窗,插拔SD卡等等;

        再次祭出我們的hierarchyviewer,查看每個部分的組成結構。

        notificationIcons的布局如圖2.5:


圖 2.5

           這里和Android 4.0原生有一點點區別,因為這里有一些類似於Android 2.3的改動,但整體上是差不多的。4個StatusBarIconView對應圖中的4個圖標,通過IconMerger也就是nocificationIcons進行整合並顯示。

       statusIcons的布局如圖2.6所示:


圖 2.6

          從圖2.6我們可以知道,statusIcons是一個包含了8個StatusBarIconView的LinearLayout,每個StatusBarIconView存放不同的系統Icon,像這里的藍牙、耳機插入、鬧鍾等等。

       signal_battery_cluster的布局如圖2.7所示:


圖 2.7

          從圖2.7我們可以看到,這塊是結構比較復雜的一塊,因為與原生Android 4.0相比,高通使用了雙卡,所以這里稍作了修改。

       clock的布局如圖2.8所示:


圖 2.8

         我們這里只看了一個Clock的布局,實際上Clock繼承自TextView,后續在代碼分析的時候會提到。

       最后讓我們看看ticker的布局結構,如圖2.9:


圖 2.9

          圖2.9中可以看到,ticker由TickerView和ImageSwitcher組成,而ImageSwitcher由兩個自定義的ImageView構成,TickerView實際上就是兩個TextView的組合。

       3.StatusBar結構分析小結

       Android 4.0的StatusBar相對於Android 2.3的改動還是比較大的,對於StatusBar的分析,有利於對StatusBar的個性化定制,詳細了解各個模塊的功能可以對Android系統有更加深入的認識。針對本次結構分析,更加熟悉了hierarchyviewer的使用,對於整個SystemUI中的StatusBar也有個更加深入的認知。

       后續將從代碼的方向繼續分析Android 4.0中StatusBar的加載以及工作流程。敬請關注

18
0
主題推薦
android 4.0 結構 代碼分析 應用程序 imageview
猜你在找
Android 4.0 ICS SystemUI淺析——StatusBar加載流程分析
Android 4.0 ICS SystemUI淺析——SystemUI啟動流程
Android 4.0 ICS SystemUI淺析——StatusBar工作流程之時間日期設置
Android 4.0 ICS SystemUI淺析——SystemUI啟動流程
Android 4.0 ICS SystemUI淺析——StatusBar加載流程之Notification
Android 4.0 ICS SystemUI淺析——SystemUI啟動流程
Android 4.0 ICS SystemUI淺析——SystemUI啟動流程
Android 4.0 ICS SystemUI淺析——SystemUI啟動流程
玩轉BealgeBoard xM——試水Android 4.0 ICS
Android4.0圖庫Gallery2代碼分析(一) 程序總體結構
查看評論
4樓 zhangchunyan8902042013-12-06 15:26發表 [回復] [引用][舉報]
您好,要是在機頂盒上怎么修改?
3樓 u0111728742013-06-23 02:15發表 [回復] [引用][舉報]
博主你好,我是一個安卓菜鳥,也不太懂編碼。但最近迷上了安卓系統。現在我碰到一個問題:systemui在讀取到3G時就會報錯並退出,其他都沒有問題。我分析比對了整個systemui代碼,沒有發現問題。現在懷疑是在讀取系統某一部的時候沒有正確代碼導致出錯。但我不知道具體是哪個程序請問這種情況應該分析哪部分的代碼?謝謝!!!
Re: yihongyuelan2013-06-24 14:48發表 [回復] [引用][舉報]
回復u011172874:看Log
2樓 zwq14572013-03-19 11:52發表 [回復] [引用][舉報]
樓主,狀態欄高度怎么修改??
1樓 i95272013-03-07 01:43發表 [回復] [引用][舉報]
看了你的文章后,重新布局了一下狀態欄.有個問題想請教:
安卓4.1.1,狀態欄是做透明了,而且可以分等級.不過有一問題,研究了一晚也解決不了,具體如下:
我希望是只是在桌面待機時狀態欄透明.但現在的情況是
1)鎖屏下,狀態欄也是這樣透明度(鎖屏下這個情況可以暫時不解決)
2)當運行背景是白色或者其他顏色的程序時,這個透明的狀態欄依然起作用,也就是說看到灰白色或其他顏色,比如運行手機QQ2013.
3)但當背景顏色是黑色的程序運行時,當然狀態欄顯示全黑了..
我現在想要的效果就是,運行任何程序,狀態欄都顯示全黑,只有在桌面透明,這樣要怎么修改啊?實在搞不懂了
Re: yihongyuelan2013-06-24 14:47發表 [回復] [引用][舉報]
回復i9527:這個要看你是什么平台了哈!如果是MTK雙卡6577平台,MTK是有方案的,MTK雙卡6589也有,不過不是很完善。高通的就跟原生的差不多了哈。以下提供一下思路:
1.在PhoneStatusBar.java中注冊一個自己的廣播。
2.在Launcher界面發送廣播,PhoneStatusBar中接收並設置StatusBar顯示透明背景。
3.進入workspace則顯示普通背景即可。
Re: xia0320112013-03-30 23:45發表 [回復] [引用][舉報]
回復i9527:你好 你狀態欄怎么搞成透明的,能交流下么,Q506011089
發表評論
  • 用 戶 名:
  • cosmoslhf
      
* 以上用戶言論只代表其個人觀點,不代表CSDN網站的觀點或立場

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com