• 前言
  • SystemUI功能介绍
  • SystemUI主要视图
    • PhoneStatusBarView
    • PanelHolder
    • keyguard_bouncer
  • 总结

前言

Android ROM开发过程中,难免会涉及到对SystemUI的修改,之前做过一些这方面的工作,现在整理下,准备按照如下章节介绍SystemUI.借此对SystemUI做下整体性回顾。
-SystemUI之功能介绍和UI布局实现
-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

通过对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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

上述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());}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

关于keyguard_bouncer在什么时候被加载的,加载的具体过程如何,后续在分析,本篇着重分析keyguard_bouncer视图的构成。
下面是keyguard_bouncer的view 树形图:

总结

以上对SystemUI的主要视图做了介绍,SystemUI的布局还是很复杂的,上述只对主要的视图从大的方向上做了分析,以后碰到具体的SystemUI view显示问题,可以先定位出问题View属于哪个大的分类,然后结合图例给出的id缩小定位范围。

原文地址 : http://blog.csdn.net/azhengye/article/details/50419409
版权声明 : 文章归原作者所有,如有侵权,请联系博主删除。

SystemUI之功能介绍和UI布局实现相关推荐

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

    Android 系统 UI - SystemUI之功能介绍和UI布局实现 前言 Android ROM开发过程中,难免会涉及到对SystemUI的修改,之前做过一些这方面的工作,现在整理下,准备按照如 ...

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

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

  3. iOS 开源项目介绍之UI篇

    本文介绍一些UI方面的开源项目,大家可以结合自己的需求选择合适的开源库进行使用和学习.大家也可以关注我的公众号阅读此文章.                                       ...

  4. android10新功能,三星A80升级安卓10 更新One UI 2.0内容新功能介绍

    三星A80升级安卓10 更新One UI 2.0内容新功能介绍 据网友反馈,三星现已面向Galaxy A80用户推送One UI 2.0更新,升级Android 10. 此外,三星Galaxy A80 ...

  5. Shiny平台构建与R包开发(一)——ui布局

    本节为Shiny平台构建与R包开发教程的第一小节. Getting Started 初识Shiny时,了解其工作机理非常重要.下面的案例展示了一个最简单的Shiny APP的工作机理: #DO NOT ...

  6. 新版CorelDRAW Technical Suite2022最新详细功能介绍

    图形设计软件CorelDRAW Technical Suite2022主要增强了图像编辑和导出功能,新功能加快了图片编辑速度,带来新工具.快捷方式和命令菜单,优化了学习工具. 使用 CorelDRAW ...

  7. Android系统源码目录及功能介绍

    Android的移植按如下流程:     1.android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     2.正确挂载文件系统,确保内核启动参数和 android 源代码 ...

  8. android uid systemui,SystemUI-功能介绍

    1. SystemUI与普通应用的区别 SystemUI 普通应用 UID 1000 应用安装时分配,>10000 编译方式 基于Android源码编译 基于Android SDK编译 安装方式 ...

  9. SpringBoot个人博客项目搭建—前端页面功能介绍(一)

    SpringBoot个人博客-前端页面功能介绍(一) 项目首页地址:https://blog.csdn.net/weixin_45019350/article/details/108869025 一. ...

  10. 一个UI布局框架,以最少的代码实现UI设置及布局控制

    Petral-UI是一个以Swift实现的 UI布局框架,以最少的代码,实现UI的搭建.属性设置以及布局控制. 源码 Github地址:github.com/HuangZhiBin- 接入条件 swi ...

最新文章

  1. 凸优化 [Convex Optimization] — [美] 鲍德(Stephen Boyd),Lieven Vandenberghe 著,王书宁,许鋆,黄晓霖 译
  2. ajax实现多选 radio true,jQuery操作radio、checkbox、select的方法总结
  3. Golang之gjson
  4. Python私有化与poperty方法
  5. Goroutine Local Storage的一些实现方案和必要性讨论
  6. Java中的Math类和日期类详解
  7. conda 命令 直接安装 OpenCV[Anaconda]
  8. oracle “**with as**”短语,也叫做子查询部分。
  9. 关于mac下连接mysql和mysql workbench连接mysql的异常
  10. java jpg转换成pdf格式_Java pdf和jpg互转案例
  11. 报童模型(2)--经济学含义和应用
  12. 芯片和计算机专业的关系,cpu是芯片吗?芯片和cpu是什么关系?
  13. 433MHz,2.4GHz,GPRS,NB-IOT各有哪些特点?
  14. Mac谷歌浏览器无法下载的解决方案
  15. ubuntu 下启用ipv6
  16. 注意力机制在NLP问题中的介绍与调查-论文翻译
  17. 11.1 WAN接入配置
  18. 【转载】 下个月,Java 开启收费模式!
  19. 【0基础学java】教学日志:项目实战-坦克大战-3
  20. AKM项目轶事之Flyback遭遇航班取消

热门文章

  1. C语言————有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,下面的程序统计卖完西瓜所需的天数
  2. 【Java】有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完?
  3. Unity环境光 Environment面板
  4. FPGA开发板公司及产品系列
  5. Linux Thermal Framework分析及实施
  6. 数字逻辑EduCoder课设项目 厨房计时器系统设计 Logisim实现
  7. sidetone 、回声抑制
  8. Python最简单的图片爬虫,只用20行代码爬遍全网
  9. 基于遗传算法的神经网络,遗传算法训练神经网络
  10. 把烂土豆砸到古永锵的脸上