SystemUI浅析

来源:互联网 发布:淘宝大号怎么关联小号 编辑:程序博客网 时间:2024/05/21 04:43

最近刚弄玩SystemUI的更改,记录一下,android4.4:


1.SystemUI的启动流程:
SystemServer(Service) -> SystemUIService(Service) -> SystemBars(class).start() -> SystemBars(class).onNoService -> SystemBars(class).createStatusBarFromConfig() -> PhoneStatusBar(class).start() ->

PhoneStatusBar(class).createAndAddWindows() -> PhoneStatusBar(class).addStatusBarWindow() -> PhoneStatusBar(class).makeStatusBarView()<此处主要是SystemUI的LAYOUT初始化,也是主要操作的地方> ->

mWindowManager.addView(mStatusBarWindow, lp)<将要显示的布局,加载到窗口显示>

启动流程的主框架基本上就是这样的。更改的地方在makeStatusBarView();

2.SystemUI的图标更新流程:(Stsusbar的系统图标更新流程)

首先是图标的初始化:

CommandQueue(class)<此类是系统级服务要更新SystemUI时的binder,也就是说,当系统要更新图标时,就会调用CommandQueue的对应方法> -> BaseStatusBar.Callbacks() -> PhoneStatusBar.Callbacks()<addIcon(),updateIcon

(),removeIcon(),addNotification(),updateNotification()...>


PhoneStatusBarPolicy(class)<此类是实现初始化statusbar系统图标的类,如果要添加默认的图标需要在此处添加> -> StatusBarManager(class系统级的服务,统筹SystemUI的图标显示)

3.SystemUI的布局(status_bar.xml)

更改的地方:将原来的布局设置为隐藏,添加现在需要显示的布局。具体查看代码部分。

4.更改状态栏的高度,显示图标等。

将原来的:@*android:dimen/status_bar_height"替换为:@dimen/add_statusbar_hieght    //更改状态栏的高度 <全部替换>

在PhoneStatusBarView.makeStatusBarView()函数中:
将原来的:mIconSize = res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_icon_size); 替换为:mIconSize = res.getDimensionPixelSize(R.dimen.status_bar_icon_size);        //替换ICon尺寸

dimens文件中:
将<dimen name="status_bar_icon_size">@*android:dimen/status_bar_icon_size</dimen>
替换为:
<dimen name="status_bar_icon_size">26px</dimen>

5.添加USB,SD,AUX,DISC图标的显示和刷新。

代码在:PhoneStatusBarView类中添加。
0 0
原创粉丝点击