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布局实现相关推荐

  1. Android 系统 UI - SystemUI之功能介绍和UI布局实现

    前言 Android ROM开发过程中,难免会涉及到对SystemUI的修改,之前做过一些这方面的工作,现在整理下,准备按照如下章节介绍SystemUI.借此对SystemUI做下整体性回顾.  -S ...

  2. 升讯威微信营销系统开发实践:(3)功能介绍与此项目推广过程的一些体会( 完整开源于 Github)...

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  3. SQL2000系统表、存储过程、函数的功能介绍及应用

    ----系统表--------------------------------------------------------------------------------------------- ...

  4. 解密电商系统-Spring boot快速开始及核心功能介绍(下)

    上次说了Spring boot快速开始及核心功能介绍,本次说说配置文件相关的. Spring Boot属性配置文件详解(一) 修改端口 # application.properties: server ...

  5. Android系统防火墙开发一(1)功能介绍

    项目地址:https://github.com/twjitm/afhq 欢迎fork和star. 简介:这个项目是我的毕业设计,主要功能有: 1:木马程序扫描,手机系统扫描,漏洞扫描,网络端口扫描,木 ...

  6. 配电室环境监控系统的站端监控屏柜功能介绍

    随着无人值守配电室的普及和贯彻,加强对配电室环境的监测,保障供电安全,已成为非常重要的工作.当电力设备出现故障或现场发生异常时(如:设备短路.电缆温度过高.进水.非法闯入等),配电室环境监控系统能及时 ...

  7. 多用户分销商城系统开发及多商家入驻的功能介绍

    多用户商城是一种电子商务平台,允许多个商家在同一个平台上出售自己的产品或服务.这种商城模式可以吸引更多的消费者,因为他们可以在同一个网站上找到多个商家的产品,而不需要分别访问不同的网站.同时,多用户商 ...

  8. Android系统移除电池电量监测管理功能

    系统优化 - 去除电池电量监测管理功能 去除电池电量监测管理功能,去除电量提示功能. 需要去除电池电量对升级功能的影响,如低电量时无法进行系统升级. 车机平台不需要电池电量监测管理,电池管理模块对界面 ...

  9. 开发android项目实战,Android 项目实战:手机安全卫士开发案例解析

    Android 项目实战:手机安全卫士开发案例解析 作 者:王家林,王家俊,王家虎 出版时间:2013 丛编项:移动互联应用开发系列 内容简介 本书通过对一款手机安全卫士开发案例的详细解析,讲解了一个 ...

最新文章

  1. RStuido Server 选择不同的 R 版本(conda 中的不同 R 版本)
  2. Thymeleaf 中js 使用等报错问题
  3. legend3---阿里云如何多个域名指向同一个网站
  4. Android读写assets、raw、sdard和工程文件的方法
  5. get方式请求接受参数的方法
  6. 软件工程概论 课堂练习【空调维修系统 类图】
  7. MATLAB生成正弦波
  8. 图解Python多修饰器时哪个先起作用
  9. 英语计算机职称考试查询成绩,北京职称外语计算机成绩长期有效
  10. 中小企业老板辛苦一整年,为什么就赚不到钱?
  11. 计算机excel还原,Excel文件恢复软件(Magic Excel Recovery)
  12. 记一次springboot应用偶发502错误的排查过程
  13. 基尔霍夫定律(Kirchhoff laws)
  14. Chess Queen
  15. Unix与Linux、Minx、Minix
  16. 前端体系认识和我的技术栈——wsdchong
  17. nginx-ingress设置日志格式-配置转发真实ip-超时参数配置-会话保持参数
  18. 从Docker零基础到懂一点实践教程(四)
  19. 1.oracle RAC11G 对单机ADG搭建详细文档
  20. Xilinx ZYNQ简介

热门文章

  1. tcp_v4_connect函数分析
  2. 详解Modbus通信协议---清晰易懂
  3. java 流 flush_Java CharArrayWriter flush()方法
  4. python mssql bulk_SqlBulkCopy:批量插入SqlServer的利器
  5. mysql工程连接互通,MySQL容器与各种应用容器的互联互通
  6. 【MyBatis】第一章 快速入门
  7. 【重难点】【Java基础 01】一致性哈希算法、sleep() 和wait() 的区别、强软弱虚引用
  8. Redis面试之传统五大数据类型的落地应用详解
  9. 【BZOJ3958】[WF2011]Mummy Madness 二分+扫描线+线段树
  10. 07 设置View的显示与隐藏