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

來源:互聯網
上載者:User

          在上一篇文章《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的載入以及工作流程。敬請關注

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.