一.状态栏形式
1.1锁屏状态栏
锁屏状态栏是只有用户设置了锁屏方式为滑动或其他安全锁时才会显示,锁屏方式设置为“无”时不会显示,其显示是伴随着锁屏界面的,也就是只有按下power键或者自动息屏后才会显示。其显示逻辑是在NotificationPanelView来控制的
案例一:
区域1为keyguard_carrier_text
区域2为cutout_space_view
区域3为system_icons_container
主要布局文件是
frameworks\base\packages\SystemUI\res\layout\keyguard_status_bar.xml
其本身是个KeyguardStatusBarView,布局代码如下图所示:
我们这里分析下cutout_space_view这个区域,大小计算方法主要在updateLayoutParamsNoCutout中处理
案例二:
布局文件为keyguard_status_bar.xml
主要的布局信息包括左侧时钟、中间刘海区域以及右侧的系统图标及运营商区域。
1.2解锁状态栏
用户通过解锁之后进入主界面下的状态栏,其布局展示如下:
案例一:
布局文件为:status_bar.xml
在最左侧预留了运营商信息空间,之后放置时钟控件信息,之后放置通知图标,右侧放置系统图标信息。
这里通知显示有两种布局,一种是左侧显示,一种是中间显示,默认情况下使用左侧显示通知,另一种情况是,将刘海隐藏显示中间的通知,代码展示如下:
案例二:
主要布局是frameworks\base\packages\SystemUI\res\layout\status_bar.xml,其本身是
个PhoneStatusBarView,布局代码如下。
1.3 下拉状态栏
该状态为用户通过解锁之后进入主界面下,在下拉通知栏显示的状态栏,显示布局如下:
案例一:
该布局主要包含了三大模块,首先是顶部显示时钟信息的布局,之后是显示日期、系统图标、电量的布局,再之后是显示快捷设置的一些按钮,这里主要是对前两块进行分析。
其布局文件包括:quick_status_bar_expanded_header.xml
上侧时钟布局文件: quick_status_bar_header_system_icons.xm
之后date布局文件:quick_qs_status_icons.xml
其父布局为qs_panel.xml,其中qs_panel.xml的父布局为status_bar_expanded.xml 与锁屏状态下一致
案例二:
其由frameworks\base\packages\SystemUI\res\layout\quick_status_bar_header_system_icons.xml和frameworks\base\packages\SystemUI\res\layout\quick_qs_status_icons.xml两个布局文件构成,其中引用的quick_status_bar_header_system_icons是顶部显示时钟和电池的布局, quick_qs_status_icons为日期和系统图标显示的布局,这两个布局都是由frameworks\base\packages\SystemUI\src\com\android\systemui\qs\QuickStatusBarHeader.java来控制。
二.状态栏加载流程
其启动加载流程如下:
前面的工作都是为了启动SystemUI这个进程,具体的布局加载都在StatusBar这个类中实现。
通过启动start方法,在这个方法中调用了createAndWindows(),主要是在这个方法中实现对视图的处理。
之后进入makeStatusBarView这个方法,在这个方法中调用了inflateStatusBarWindow()
加载了各种状态栏布局的父布局,并在NotificationPanelViewController对锁屏状态栏的视图做了处理,
之后在makeStatusBarView方法中加载qs_panel视图,也就是解锁下拉通知栏的状态栏布局
之后加载Status_bar视图
在这里已经把所有关于通知栏视图加载完成,在之前介绍过这之后进行显示视图,通过WindowManager的addView方法显示。