SystemUI状态栏形式及流程

一.状态栏形式

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

主要的布局信息包括左侧时钟、中间刘海区域以及右侧的系统图标及运营商区域。

  KeyguardStatusBarView    updateVisibilities()

 

默认值为false,且查看赋值也全设置为false所以不显示多用户图标

 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方法显示。


 

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android修改SystemUI状态栏需要进行以下步骤: 1. 获取修改状态栏的权限:在AndroidManifest.xml文件中添加以下代码: ```xml <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> ``` 2. 创建自定义SystemUI布局:在res目录下创建一个xml布局文件,例如custom_status_bar_layout.xml,用于自定义状态栏的样式和内容。 3. 创建一个Service类并继承自StatusBarService:在该Service类的onCreate()方法中调用super.onCreate()来初始化状态栏。 4. 在Service类中重写createStatusBarView()方法,并在其中加载自定义SystemUI布局文件: ```java @Override public View createStatusBarView() { LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); return inflater.inflate(R.layout.custom_status_bar_layout, null); } ``` 5. 创建一个BroadcastReceiver类用于接收系统广播消息:在该类中重写onReceive()方法,监听状态栏相关的广播消息。 6. 在BroadcastReceiver类的onReceive()方法中处理状态栏相关的广播消息,比如接收到通知栏展开折叠的消息时,可以通过调用下面的代码实现状态栏展开/折叠: ```java Object statusBarService = getSystemService("statusbar"); Class<?> statusBarManagerClazz = Class.forName("android.app.StatusBarManager"); Method expandMethod = statusBarManagerClazz.getMethod("expandNotificationsPanel"); expandMethod.invoke(statusBarService); ``` 7. 在AndroidManifest.xml文件中注册Service和BroadcastReceiver类。 以上是Android修改SystemUI状态栏的基本步骤,根据具体需求可以进行更多的自定义操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值