SystemUI之功能介绍和UI布局实现
- 前言
- SystemUI功能介紹
- SystemUI主要視圖
- PhoneStatusBarView
- PanelHolder
- keyguard_bouncer
- 總結(jié)
前言
Android ROM開(kāi)發(fā)過(guò)程中,難免會(huì)涉及到對(duì)SystemUI的修改,之前做過(guò)一些這方面的工作,現(xiàn)在整理下,準(zhǔn)備按照如下章節(jié)介紹SystemUI.借此對(duì)SystemUI做下整體性回顧。
-SystemUI之功能介紹和UI布局實(shí)現(xiàn)
-SystemUI之呈現(xiàn)流程
-SystemUI之常見(jiàn)需求/Bug整理
-SystemUI之為我所用
該系列的博文都會(huì)基于Android L的代碼分析。本篇主寫SystemUI界面構(gòu)成以及代碼的整體框架。
SystemUI功能介紹
手機(jī)中的下拉狀態(tài)欄,鎖屏,通知以及最近打開(kāi)任務(wù)列表等功能都是SystemUI實(shí)現(xiàn)的。Android L對(duì)SystemUI做的更新比較大,體現(xiàn)在
- Notification 和 Quick Settings 被合并在一個(gè)界面中
- KeyGuard和SystemUI聯(lián)系更緊密了,KeyGuard作為一個(gè)java lib庫(kù)供SystemUI調(diào)用
- Recents App采用了疊加立體式顯示效果,界面更加絢麗。
SystemUI的代碼結(jié)構(gòu)如下圖:
主要功能點(diǎn)對(duì)應(yīng)的界面如下圖所示:
SystemUI主要視圖
SystemUI的根視圖是在PhoneStatusBar的makeStatusBarView()方法中加載的。
protected PhoneStatusBarView makeStatusBarView() {mStatusBarWindow = (StatusBarWindowView) View.inflate(context,R.layout.super_status_bar, null); }- 1
- 2
- 3
- 4
通過(guò)對(duì)super_status_bar.xml文件的認(rèn)識(shí),就能了解SystemUI的大體視圖構(gòu)成。下面貼出省略后的該文件代碼片段:
<!-- This is the combined status bar / notification panel window. --> <com.android.systemui.statusbar.phone.StatusBarWindowView><com.android.systemui.statusbar.BackDropViewandroid:id="@+id/backdrop"><ImageView android:id="@+id/backdrop_back" /><ImageView android:id="@+id/backdrop_front"/></com.android.systemui.statusbar.BackDropView><com.android.systemui.statusbar.ScrimView android:id="@+id/scrim_behind"/><com.android.systemui.statusbar.AlphaOptimizedViewandroid:id="@+id/heads_up_scrim"/><include layout="@layout/status_bar"/><FrameLayout android:id="@+id/brightness_mirror"><FrameLayout android:background="@drawable/brightness_mirror_background"><include layout="@layout/quick_settings_brightness_dialog"/></FrameLayout></FrameLayout><com.android.systemui.statusbar.phone.PanelHolderandroid:id="@+id/panel_holder"><include layout="@layout/status_bar_expanded"/></com.android.systemui.statusbar.phone.PanelHolder><com.android.systemui.statusbar.ScrimView android:id="@+id/scrim_in_front"/></com.android.systemui.statusbar.phone.StatusBarWindowView>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
上述view從layout看主要分為三塊。
- include進(jìn)來(lái)的status_bar布局,也就是PhoneStatusBarView。
- PanelHolder
- ScrimView
其實(shí)這里還漏掉了一個(gè)重要的view—-keyguard_bouncer,它不是直接在layout布局里加入的,只有用戶設(shè)置鎖屏保護(hù)后才可見(jiàn)。至于ScrimView我在開(kāi)發(fā)中沒(méi)有修改過(guò),具體作用不甚清楚,在此不做介紹了,以免誤人子弟。
PhoneStatusBarView
PhoneStatusBarView主要用來(lái)顯示系統(tǒng)狀態(tài)、通知等,主要包括 notification icons 和 status bar icons
下面是PhoneStatusBarView的view 樹(shù)形圖:
PanelHolder
PanelHolder是用戶下拉 status bar 后得到的 view。它主要包含 QuickSettings 和 Notification panel 兩個(gè)部分。PanelHolder是一個(gè)繼承自FrameLayout的自定義view,它的內(nèi)容是通過(guò)include status_bar_expanded.xml進(jìn)行填充的。PanelHolder的布局比較復(fù)雜,為了提高view的重用性大量的使用了include標(biāo)簽。下面是PanelHolder的view樹(shù)形圖, 只給出了了主要的view:
keyguard_bouncer
先來(lái)看看keyguard_bouncer是個(gè)什么樣。
需要注意的是keyguard_bouncer view 有多種形式,這里設(shè)置的是圖案解鎖,如果設(shè)置的是密碼解鎖keyguard_bouncer就會(huì)以數(shù)字鍵盤的形式顯示出來(lái)。但無(wú)論是哪種解鎖模式,都是在KeyguardBouncer類中加載進(jìn)來(lái)的。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
關(guān)于keyguard_bouncer在什么時(shí)候被加載的,加載的具體過(guò)程如何,后續(xù)在分析,本篇著重分析keyguard_bouncer視圖的構(gòu)成。
下面是keyguard_bouncer的view 樹(shù)形圖:
總結(jié)
以上對(duì)SystemUI的主要視圖做了介紹,SystemUI的布局還是很復(fù)雜的,上述只對(duì)主要的視圖從大的方向上做了分析,以后碰到具體的SystemUI view顯示問(wèn)題,可以先定位出問(wèn)題View屬于哪個(gè)大的分類,然后結(jié)合圖例給出的id縮小定位范圍。
原文地址 : http://blog.csdn.net/azhengye/article/details/50419409
版權(quán)聲明 : 文章歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系博主刪除。
總結(jié)
以上是生活随笔為你收集整理的SystemUI之功能介绍和UI布局实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【游戏开发】小白学Lua(上)
- 下一篇: 解决yum安装gcc报错:Error: