SystemUI状态条下拉视图显示过程

本文详细解析了Android系统状态栏的实现原理,包括关键控件如brightness_mirror的作用、触摸事件处理流程、状态条展开时的UI更新机制以及如何通过修改系统属性禁用状态栏下拉功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

super_status_bar.xml中的brightness_mirror是状态条上面亮度调节的控件。panel_holder是下面包括所有控件的一个容器。在status_bar_expanded_header.xml中system_icons_super_container为状态条下拉时候显示的顶层布局。split_clock_view.xml用来绘制下拉菜单左边的时间日期。状态条控件的显示是用的PanelBar.java。
顶上的状态条被下拉首先被处理的是触摸事件,也就是PhoneStatusBar里面的interceptTouchEvent函数,当状态条被下拉出来之后就会执行PanelBar里面的onTouchEvent函数,它会根据触摸的位置选择被触摸的panel,然后执行startOpeningPanel()就是用来初始化panel的状态,调用除NotificationPanelView以外其他视图的collapse函数,然后调用被触摸panel的onTouchEvent函数里面的ACTION_MOVE分支,执行setExpandedHeightInternal根据手指移动的距离刷新panel的高度并更新状态条的状态指示当前被扩展的状态,如果被完全下拉下来,则不会在更新状态条视图,否则不断调用NotificationPanelView里面的onHeightUpdated函数来更新该状态条的里面的内容。因此在PhoneStatusBar里面的onInterceptKeyEvent中的最后加入if(SystemProperties.get(“persist.sys.sysui.config”)){return true;}使得状态条不能被下拉下来。setprop persist.sys.sysui.config命令需要被写入init.rc文件里面,该文件会被编译成boot.img,所以要替换掉boot.img,之后在使用setprop命令就会在data/local目录下生成该 persist.sys.sysui.config目录,所以重启之后该属性值还生效。//1612001724 yah1826

### Android 11 SystemUI 源码解析 #### SystemUI 应用概述 SystemUI 是以应用形式运行的一个持久进程,其主要职责在于提供系统的用户界面组件,包括但不限于状态栏、通知栏、音量控制面板、快捷设置以及锁屏界面等功能。值得注意的是,尽管承担着重要角色,该应用程序并不位于 `system_server` 进程内部,而是独立存在于框架层下的特定路径中:`frameworks/base/packages/SystemUI`[^1]。 #### 下拉通知栏布局定制基础 针对 Android 11 中的 SystemUI 组件特别是下拉通知栏部分,如果开发者希望对其进行自定义,则需深入了解原有机制及其背后的源代码结构。具体来说,要熟悉两个关键文件: - **NotificationContentInflater.java**: 负责构建并填充单通知项视图实例。 - **Notification.java**: 定义了安卓平台上的通用通知对象模型。 这两个类共同作用于通知显示逻辑的设计与实现过程之中[^2]。 #### 启动流程概览 为了更好地理解整个 SystemUI 的工作原理,可以从它的启动顺序入手。首先是通过 Zygote 初始化阶段触发 `SystemServer.main()` 方法来开启服务;随后,在完成必要的准备工作之后,会创建名为 `.SystemUIApplication` 的主程序实体,并指定相应的组件工厂用于后续扩展支持。当这个核心对象被成功建立起来以后,紧接着便是调用其中的服务管理器 `SystemUIService.onCreate()` 来激活由配置文件 config.xml 所描述的一系列子系统和服务模块][^[^34]。 ```java // 示例:获取 NotificationContentInflater 实例的方式 NotificationContentInflater inflater = (NotificationContentInflater) context.getSystemService(Context.NOTIFICATION_SERVICE); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值