Android 系统(58)---Android 系统 UI - SystemUI之功能介绍和UI布局实现
Android 系统 UI - SystemUI之功能介绍和UI布局实现
前言
Android ROM开发过程中,难免会涉及到对SystemUI的修改,之前做过一些这方面的工作,现在整理下,准备按照如下章节介绍SystemUI.借此对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
- 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
上述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());}
}
关于keyguard_bouncer在什么时候被加载的,加载的具体过程如何,后续在分析,本篇着重分析keyguard_bouncer视图的构成。
下面是keyguard_bouncer的view 树形图:
总结
以上对SystemUI的主要视图做了介绍,SystemUI的布局还是很复杂的,上述只对主要的视图从大的方向上做了分析,以后碰到具体的SystemUI view显示问题,可以先定位出问题View属于哪个大的分类,然后结合图例给出的id缩小定位范围
Android 系统(58)---Android 系统 UI - SystemUI之功能介绍和UI布局实现相关推荐
- Android 系统 UI - SystemUI之功能介绍和UI布局实现
前言 Android ROM开发过程中,难免会涉及到对SystemUI的修改,之前做过一些这方面的工作,现在整理下,准备按照如下章节介绍SystemUI.借此对SystemUI做下整体性回顾. -S ...
- 升讯威微信营销系统开发实践:(3)功能介绍与此项目推广过程的一些体会( 完整开源于 Github)...
GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...
- SQL2000系统表、存储过程、函数的功能介绍及应用
----系统表--------------------------------------------------------------------------------------------- ...
- 解密电商系统-Spring boot快速开始及核心功能介绍(下)
上次说了Spring boot快速开始及核心功能介绍,本次说说配置文件相关的. Spring Boot属性配置文件详解(一) 修改端口 # application.properties: server ...
- Android系统防火墙开发一(1)功能介绍
项目地址:https://github.com/twjitm/afhq 欢迎fork和star. 简介:这个项目是我的毕业设计,主要功能有: 1:木马程序扫描,手机系统扫描,漏洞扫描,网络端口扫描,木 ...
- 配电室环境监控系统的站端监控屏柜功能介绍
随着无人值守配电室的普及和贯彻,加强对配电室环境的监测,保障供电安全,已成为非常重要的工作.当电力设备出现故障或现场发生异常时(如:设备短路.电缆温度过高.进水.非法闯入等),配电室环境监控系统能及时 ...
- 多用户分销商城系统开发及多商家入驻的功能介绍
多用户商城是一种电子商务平台,允许多个商家在同一个平台上出售自己的产品或服务.这种商城模式可以吸引更多的消费者,因为他们可以在同一个网站上找到多个商家的产品,而不需要分别访问不同的网站.同时,多用户商 ...
- Android系统移除电池电量监测管理功能
系统优化 - 去除电池电量监测管理功能 去除电池电量监测管理功能,去除电量提示功能. 需要去除电池电量对升级功能的影响,如低电量时无法进行系统升级. 车机平台不需要电池电量监测管理,电池管理模块对界面 ...
- 开发android项目实战,Android 项目实战:手机安全卫士开发案例解析
Android 项目实战:手机安全卫士开发案例解析 作 者:王家林,王家俊,王家虎 出版时间:2013 丛编项:移动互联应用开发系列 内容简介 本书通过对一款手机安全卫士开发案例的详细解析,讲解了一个 ...
最新文章
- RStuido Server 选择不同的 R 版本(conda 中的不同 R 版本)
- Thymeleaf 中js 使用等报错问题
- legend3---阿里云如何多个域名指向同一个网站
- Android读写assets、raw、sdard和工程文件的方法
- get方式请求接受参数的方法
- 软件工程概论 课堂练习【空调维修系统 类图】
- MATLAB生成正弦波
- 图解Python多修饰器时哪个先起作用
- 英语计算机职称考试查询成绩,北京职称外语计算机成绩长期有效
- 中小企业老板辛苦一整年,为什么就赚不到钱?
- 计算机excel还原,Excel文件恢复软件(Magic Excel Recovery)
- 记一次springboot应用偶发502错误的排查过程
- 基尔霍夫定律(Kirchhoff laws)
- Chess Queen
- Unix与Linux、Minx、Minix
- 前端体系认识和我的技术栈——wsdchong
- nginx-ingress设置日志格式-配置转发真实ip-超时参数配置-会话保持参数
- 从Docker零基础到懂一点实践教程(四)
- 1.oracle RAC11G 对单机ADG搭建详细文档
- Xilinx ZYNQ简介
热门文章
- tcp_v4_connect函数分析
- 详解Modbus通信协议---清晰易懂
- java 流 flush_Java CharArrayWriter flush()方法
- python mssql bulk_SqlBulkCopy:批量插入SqlServer的利器
- mysql工程连接互通,MySQL容器与各种应用容器的互联互通
- 【MyBatis】第一章 快速入门
- 【重难点】【Java基础 01】一致性哈希算法、sleep() 和wait() 的区别、强软弱虚引用
- Redis面试之传统五大数据类型的落地应用详解
- 【BZOJ3958】[WF2011]Mummy Madness 二分+扫描线+线段树
- 07 设置View的显示与隐藏