日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SystemUI之功能介绍和UI布局实现

發布時間:2023/12/16 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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類中加載進來的。

/*** A class which manages the bouncer on the lockscreen.*/ public class KeyguardBouncer {private ViewGroup mRoot;private ViewGroup mContainer;private void inflateView() {mRoot = (ViewGroup) LayoutInflater.from(mContext).inflate(R.layout.keyguard_bouncer, null);mContainer.addView(mRoot, mContainer.getChildCount());} }
  • 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布局实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。