SystemUI之功能介绍和UI布局实现
- 前言
- SystemUI功能介紹
- SystemUI主要視圖
- PhoneStatusBarView
- PanelHolder
- keyguard_bouncer
- 總結
前言
Android ROM開發過程中,難免會涉及到對SystemUI的修改,之前做過一些這方面的工作,現在整理下,準備按照如下章節介紹SystemUI.借此對SystemUI做下整體性回顧。
-SystemUI之功能介紹和UI布局實現
-SystemUI之呈現流程
-SystemUI之常見需求/Bug整理
-SystemUI之為我所用
該系列的博文都會基于Android L的代碼分析。本篇主寫SystemUI界面構成以及代碼的整體框架。
SystemUI功能介紹
手機中的下拉狀態欄,鎖屏,通知以及最近打開任務列表等功能都是SystemUI實現的。Android L對SystemUI做的更新比較大,體現在
- Notification 和 Quick Settings 被合并在一個界面中
- KeyGuard和SystemUI聯系更緊密了,KeyGuard作為一個java lib庫供SystemUI調用
- Recents App采用了疊加立體式顯示效果,界面更加絢麗。
SystemUI的代碼結構如下圖:
主要功能點對應的界面如下圖所示:
SystemUI主要視圖
SystemUI的根視圖是在PhoneStatusBar的makeStatusBarView()方法中加載的。
protected PhoneStatusBarView makeStatusBarView() {mStatusBarWindow = (StatusBarWindowView) View.inflate(context,R.layout.super_status_bar, null); }- 1
- 2
- 3
- 4
通過對super_status_bar.xml文件的認識,就能了解SystemUI的大體視圖構成。下面貼出省略后的該文件代碼片段:
<!-- 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進來的status_bar布局,也就是PhoneStatusBarView。
- PanelHolder
- ScrimView
其實這里還漏掉了一個重要的view—-keyguard_bouncer,它不是直接在layout布局里加入的,只有用戶設置鎖屏保護后才可見。至于ScrimView我在開發中沒有修改過,具體作用不甚清楚,在此不做介紹了,以免誤人子弟。
PhoneStatusBarView
PhoneStatusBarView主要用來顯示系統狀態、通知等,主要包括 notification icons 和 status bar icons
下面是PhoneStatusBarView的view 樹形圖:
PanelHolder
PanelHolder是用戶下拉 status bar 后得到的 view。它主要包含 QuickSettings 和 Notification panel 兩個部分。PanelHolder是一個繼承自FrameLayout的自定義view,它的內容是通過include status_bar_expanded.xml進行填充的。PanelHolder的布局比較復雜,為了提高view的重用性大量的使用了include標簽。下面是PanelHolder的view樹形圖, 只給出了了主要的view:
keyguard_bouncer
先來看看keyguard_bouncer是個什么樣。
需要注意的是keyguard_bouncer view 有多種形式,這里設置的是圖案解鎖,如果設置的是密碼解鎖keyguard_bouncer就會以數字鍵盤的形式顯示出來。但無論是哪種解鎖模式,都是在KeyguardBouncer類中加載進來的。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
關于keyguard_bouncer在什么時候被加載的,加載的具體過程如何,后續在分析,本篇著重分析keyguard_bouncer視圖的構成。
下面是keyguard_bouncer的view 樹形圖:
總結
以上對SystemUI的主要視圖做了介紹,SystemUI的布局還是很復雜的,上述只對主要的視圖從大的方向上做了分析,以后碰到具體的SystemUI view顯示問題,可以先定位出問題View屬于哪個大的分類,然后結合圖例給出的id縮小定位范圍。
原文地址 : http://blog.csdn.net/azhengye/article/details/50419409
版權聲明 : 文章歸原作者所有,如有侵權,請聯系博主刪除。
總結
以上是生活随笔為你收集整理的SystemUI之功能介绍和UI布局实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【游戏开发】小白学Lua(上)
- 下一篇: 解决yum安装gcc报错:Error: