systemUI 学习记录1

systemUI主要分为五个部分statusBar 状态栏,NavigationBar 导航栏,Notification Panel 通知栏,Recents 近期任务界面,Keyguard 锁屏界面

systemUI属于Android framework的一部分,这也就意味着,systemUI在正常情况下是不可能被替换的

systemUI的源码目录在/framework/base/packages/SystemUI/ apk路径在/system/priv-app/SystemUI/

systemUI主要分为11个子模块

1.StatusBar:通知消息提示和状态展现
2.NavigationBar:返回,HOME,Recent
3.KeyGuard:锁屏模块可以看做单独的应用,提供基本的手机个人隐私保护
4.Recents:近期应用管理,以堆叠栈的形式展现。
5.Notification Panel:展示系统或应用通知内容。提供快速系统设置开关。
6.VolumeUI:来用展示或控制音量的变化:媒体音量、铃声音量与闹钟音量
7.截屏界面:长按电源键+音量下键后截屏,用以展示截取的屏幕照片/内容
8.PowerUI:主要处理和Power相关的事件,比如省电模式切换、电池电量变化和开关屏事件等。
9.RingtonePlayer:铃声播放
10.StackDivider:控制管理分屏
11.PipUI:提供对于画中画模式的管理

statusBar 从结构上来讲下拉菜单和状态栏都是属于statusbar                                                            他的入口是从 start()开始,主要是绑定各种服务,创建StatusBar :createAndAddWindows() ,并且做一些初始化值。                                                               systemUI 学习记录1_第1张图片systemUI 学习记录1_第2张图片    到CollapsedStatusBarFragment才算状态栏的开始,在onCreateView中加载status_bar 其中 根view:StatusBarWindowView 这个是一个继承Frame Layout的view。所以能比较初步的知道这个子view的界面加载流程                                                                                                status_bar_contents 这个Linear Layout 里面包含了 status_bar_left_side 从名字来看就知道是状态栏的左边部分,这个状态栏左边包含了时钟 clock 和短信通知 notification_icon_area              system_icon_area 这个LinearLayout 包含了 system_icons 是状态栏的右边部分,里边包含了电视图标和系统状态图标   NotificationIconAreaController 这个类主要是用于短信icon得控制类 

PhoneStatusBarPolicy 这个类主要是负责statusIcon的添加和更新,是statusIcon初始化和更新的核心类

StatusBarIconContrllerImpl 是 StatusBarIconController 实现类,提供对IconGroup(即IconManager)的管理

StatusBarIconList 是 StatusBarIconControllerImpl 的父类,保存所有 Status Icon 的 Slot 和对应的Icon

IconManager 负责和View打交道。仔细的同学,应该记得StatusIcon罪恶一生开始地方那两行代码,有DarkIconManager,并将view传入了DarkIconManager

 NavigationBar导航栏导航栏的容器为NavigationBarInflaterView,继承自FrameLayout

Keyguard并没有被编译成一个APK文件,而是被编译成了一个Java静态库 依赖于SystemUI而存在的

 RecentsActivity.java 中的布局文件 使用了一个自定义的控件recents(RecentsView)

mStackActionButton即全部清除按钮,mEmptyView 即当TaskStack(Task的集合) 数量为空时显示的TextView,因此我们平时见到的APP的任务管理应该是在TaskStackView中的

Notification Panel下拉栏  status_bar_expanded.xml下拉栏的布局 三个重要的布局  1.@layout/keyguard_status_view 这个是锁屏界面的View                                     2.@+id/qs_frame  QS快捷面板                                                               3.@+id/notification_stack_scroller短信通知栏                                                                               在StatusBar有如下这段代码,这样@+id/qs_frame的界面的控制就被转移到QSFragment,相应的layout也就变成了qs_panelsystemUI 学习记录1_第3张图片

1.@+id/quick_settings_panel 这个就是快捷面板容器,布局风格对应我们开篇说的第一幅图。2.@layout/quick_status_bar_expanded_header  这个layout也包含了一个快捷面板

 上面有一行((QSFragment)qs).setHost(qsh)                  systemUI 学习记录1_第4张图片systemUI 学习记录1_第5张图片

你可能感兴趣的:(学习,1024程序员节)