关于SystemUI的源码分析

24. S700平台的SystemUI源码分析:
(1) SystemUI源码结构: 
keyguard/   ---> 联系SystemUI和Keyguard之间
qs/         ---> Quick Settings 相关处理
recents/    ---> 处理最近打开的应用
statusbar/phone  ---> 控制通知显示和keyguard的状态

(2) 主要功能点对应的界面:
Status Bar  ---> 屏幕最上面显示wifi,信号强度等区域
Notification  ---> 下拉菜单区域
Navigation Bar ---> 屏幕底部的虚拟按键区域 

(3) SystemUI视图的加载流程:
SystemUI的根视图是在PhoneStatusBar的makeStatusBarView()方法中加载的,就是下面这行代码
mStatusBarWindow = (StatusBarWindowView) View.inflate(context,R.layout.super_status_bar, null);可以看出 R.layout.super_status_bar就是SystemUI的根视图,super_status_bar.xml布局文件位置是在android\frameworks\base\packages\SystemUI\res\layout\目录下,它里面的布局主要看三块,先看第一块
<includ layout="@layout/status_bar",通过include标签将status_bar包含进来,status_bar对应PhoneStatusBarView类,就是手机屏幕最上面显示区域;为什么说status_bar对应PhoneStatusBarView这个类呢?因为status_bar布局文件的首个标签就是PhoneStatusBarView这个自定义控件类,status_bar位置在android\frameworks\base\packages\SystemUI\res\layout\目录,PhoneStatusBarView类在adroid\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\目录,这个类主要是用来显示系统状态,通知等,主要包括notification icons和status bar icons;

再看第二块<com.android.systemui.statusbar.phone.PanelHolder,这是个容器,继承FrameLayout的自定义View,它里面通过include标签将status_bar_expanded布局文件包含进来,对应PanelHolder类,是下拉出来的显示视图,它主要包括QuickSettings和Notification Panel两个部分;再来看看status_bar_expanded.xml布局文件,这个布局文件主要包含三个部分,最上面类似状态栏部分视图,对应status_bar_expanded_header.xml文件,对应StatusBarHeaderView类;中间是快速设置部分视图,对应status_bar_expanded.xml布局文件中的id 为@+id/scroll_view的ObservableScrollView类;最下面是消息通知部分视图,对应tatus_bar_expanded.xml布局文件中的id为@+id/notification_stack_scroller的NotificationStackScrollLayout类;最后看第三块keyguard_bouncer,它不是直接在layout布局里加入的,只有用户设置锁屏保护后才可见,对应KeyguardBouncer.java类,不做记录分析UI布局文件层次关系super_status_bar.xml包含进了status_bar.xml,还包含status_bar_expanded.xml,status_bar_expanded.xml包含了status_bar_expanded_header.xml

说明:以上源码是安卓5.1.1系统的SystemUI源码

猜你喜欢

转载自blog.csdn.net/wzh048503/article/details/79786105