Android 4.0 ICS SystemUI浅析——StatusBar结构分析

Android 4.0 ICS SystemUI浅析——StatusBar结构分析

分类: Android 17291人阅读 评论(7) 收藏 举报

          在上一篇文章《Android 4.0 ICS SystemUI浅析——SystemUI启动流程》中以及提到了SystemUI的组成,本文主要分析其中的StatusBar结构。

      1.布局概览

      首先,我们通过hierarchyviewer这个工具来查看一下系统启动后的布局情况(注:hierarchyviewer在SDK/tools目录下,在windows环境下直接运行hierarchyviewer.bat,linux环境下终端执行./hierarchyviewer;安装ADT插件后也可以通过Eclipse调用hierarchyviewer来查看)。如图1.1:


图 1.1

这里简单的介绍一下当前界面的组件,该界面为模拟器启动后解锁界面。其中包含了7个组件,从上到下依次为RecentsPanel、SatusBar、StatusBarExpanded、TrackingView、Keyguard、com.android.launcher/com.android.launcher2.Launcher、com.android.systemui.ImageWallpaper。

       RecentsPanel:指的是我们长按Home键弹出的“最近运行程序”。如图1.2:


图 1.2

       SatusBar:这就是我们的主角——状态栏。由于是刚启动,因此没有运行任何有通知的应用程序,如下图1.3:


图 1.3

        StatusBarExpanded:根据字面意思其实我们已经知道了,这实际上就是通知栏下拉时候的扩展界面。如图1.4:


图 1.4

注:因为模拟器实际上无法显示出USB当前连接状态,因此这里换用真机截图。

       TrackingView:指的是我们将通知栏下拉以后,除开StatusBarExpanded以外的地方。如图1.5:


图 1.5

           Keyguard:这就是屏幕锁,因为目前已经解锁,因此看不到任何布局。

        com.android.launcher/com.android.launcher2.Launcher:就是我们的Launcher,如图1.6:


图 1.6

         com.android.systemui.ImageWallpaper:也就是壁纸,是由SystemUI里的ImageWallpaper来设置的。

       2.StatusBar之庖丁解牛

       根据前面的整体描述,相信大家已经对Android 4.0的界面有了一个整体的概念,那么接下来就切入正题——StatusBar的结构分析。对于StatusBar的分析从以下两方面入手:首先,从界面上分析。通过hierarchyviewer来观察StatusBar的布局结构;其次,通过代码分析各个组件的具体实现(注:本文主要从界面进行结构分析)。

       以为后面我将会用真机进行演示,因此这里贴出真机的StatusBar结构图以及原生的StatuBar结构图,以进行对比。真机采用的是高通双卡平台,在原生基础上进行的修改,原生StatusBar的结构如图2.1,真机StatusBar结构如图2.2:


图 2.1


图 2.2(看不清楚的朋友可以点这里下载全部图片)

          图2.1和2.2中清晰的列出了StatusBar的结构组成,StatusBar实际上是由PhoneStatusBarView构成,而PhoneStatusBarView又细分成两个大模块,分别是icons和ticker两个布局。我们知道,在通常情况下,系统左边放置通知图标(notificationIcons),中间放置状态图标(statusIcons)以及信号图标(signal_battery_cluster),右边放置日期(clock),ticker默认是看不见的,因此实际上我们真正看到的StatusBar是icons的布局。下面我们分别介绍这些独立模块的结构。

        我将StatusBar的组成部件(notificationIcons、statusIcons、signal_battery_cluster、clock、ticker)分别使用了不同的背景,这样就能清晰直观的看到各个布局之间的关系了(注:我使用的是高通的双卡平台)。如图2.3和2.4:


图 2.3


图 2.4

在图2.3和图2.4中,各个颜色代表的含义如下:

红色:notificationIcons,通知图标,比如我们常见的360以及QQ等等,都会在这里显示自己的图标;

紫色:statusIcons,状态图标,这里会放置系统的一些状态图标,比如像蓝牙、闹钟、耳机插入等等;

绿色:signal_battery_cluster,信号以及电量图标,这里主要放置了wifi以及手机信号和电池电量的图标(注:没有插入SIM卡);

黄色:clock,时钟图标;

蓝色:ticker,通知信息图标,当系统接收到通知后,有的通知具有通知信息,因此会通过ticker进行显示,比如禁用360的悬浮窗,插拔SD卡等等;

        再次祭出我们的hierarchyviewer,查看每个部分的组成结构。

        notificationIcons的布局如图2.5:


图 2.5

           这里和Android 4.0原生有一点点区别,因为这里有一些类似于Android 2.3的改动,但整体上是差不多的。4个StatusBarIconView对应图中的4个图标,通过IconMerger也就是nocificationIcons进行整合并显示。

       statusIcons的布局如图2.6所示:


图 2.6

          从图2.6我们可以知道,statusIcons是一个包含了8个StatusBarIconView的LinearLayout,每个StatusBarIconView存放不同的系统Icon,像这里的蓝牙、耳机插入、闹钟等等。

       signal_battery_cluster的布局如图2.7所示:


图 2.7

          从图2.7我们可以看到,这块是结构比较复杂的一块,因为与原生Android 4.0相比,高通使用了双卡,所以这里稍作了修改。

       clock的布局如图2.8所示:


图 2.8

         我们这里只看了一个Clock的布局,实际上Clock继承自TextView,后续在代码分析的时候会提到。

       最后让我们看看ticker的布局结构,如图2.9:


图 2.9

          图2.9中可以看到,ticker由TickerView和ImageSwitcher组成,而ImageSwitcher由两个自定义的ImageView构成,TickerView实际上就是两个TextView的组合。

       3.StatusBar结构分析小结

       Android 4.0的StatusBar相对于Android 2.3的改动还是比较大的,对于StatusBar的分析,有利于对StatusBar的个性化定制,详细了解各个模块的功能可以对Android系统有更加深入的认识。针对本次结构分析,更加熟悉了hierarchyviewer的使用,对于整个SystemUI中的StatusBar也有个更加深入的认知。

       后续将从代码的方向继续分析Android 4.0中StatusBar的加载以及工作流程。敬请关注

18
0
主题推荐
android 4.0 结构 代码分析 应用程序 imageview
猜你在找
Android 4.0 ICS SystemUI浅析——StatusBar加载流程分析
Android 4.0 ICS SystemUI浅析——SystemUI启动流程
Android 4.0 ICS SystemUI浅析——StatusBar工作流程之时间日期设置
Android 4.0 ICS SystemUI浅析——SystemUI启动流程
Android 4.0 ICS SystemUI浅析——StatusBar加载流程之Notification
Android 4.0 ICS SystemUI浅析——SystemUI启动流程
Android 4.0 ICS SystemUI浅析——SystemUI启动流程
Android 4.0 ICS SystemUI浅析——SystemUI启动流程
玩转BealgeBoard xM——试水Android 4.0 ICS
Android4.0图库Gallery2代码分析(一) 程序总体结构
id="ad_frm_0" style="BORDER-LEFT-WIDTH: 0px; OVERFLOW: hidden; HEIGHT: 90px; BORDER-RIGHT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; WIDTH: 746px" src="http://blog.csdn.net/common/ad.html?t=4&containerId=ad_cen&frmId=ad_frm_0" frameborder="0" scrolling="no">
查看评论
4楼 zhangchunyan890204 2013-12-06 15:26发表 [回复] [引用] [举报]
您好,要是在机顶盒上怎么修改?
3楼 u011172874 2013-06-23 02:15发表 [回复] [引用] [举报]
博主你好,我是一个安卓菜鸟,也不太懂编码。但最近迷上了安卓系统。现在我碰到一个问题:systemui在读取到3G时就会报错并退出,其他都没有问题。我分析比对了整个systemui代码,没有发现问题。现在怀疑是在读取系统某一部的时候没有正确代码导致出错。但我不知道具体是哪个程序请问这种情况应该分析哪部分的代码?谢谢!!!
Re: yihongyuelan 2013-06-24 14:48发表 [回复] [引用] [举报]
回复u011172874:看Log
2楼 zwq1457 2013-03-19 11:52发表 [回复] [引用] [举报]
楼主,状态栏高度怎么修改??
1楼 i9527 2013-03-07 01:43发表 [回复] [引用] [举报]
看了你的文章后,重新布局了一下状态栏.有个问题想请教:
安卓4.1.1,状态栏是做透明了,而且可以分等级.不过有一问题,研究了一晚也解决不了,具体如下:
我希望是只是在桌面待机时状态栏透明.但现在的情况是
1)锁屏下,状态栏也是这样透明度(锁屏下这个情况可以暂时不解决)
2)当运行背景是白色或者其他颜色的程序时,这个透明的状态栏依然起作用,也就是说看到灰白色或其他颜色,比如运行手机QQ2013.
3)但当背景颜色是黑色的程序运行时,当然状态栏显示全黑了..
我现在想要的效果就是,运行任何程序,状态栏都显示全黑,只有在桌面透明,这样要怎么修改啊?实在搞不懂了
Re: yihongyuelan 2013-06-24 14:47发表 [回复] [引用] [举报]
回复i9527:这个要看你是什么平台了哈!如果是MTK双卡6577平台,MTK是有方案的,MTK双卡6589也有,不过不是很完善。高通的就跟原生的差不多了哈。以下提供一下思路:
1.在PhoneStatusBar.java中注册一个自己的广播。
2.在Launcher界面发送广播,PhoneStatusBar中接收并设置StatusBar显示透明背景。
3.进入workspace则显示普通背景即可。
Re: xia032011 2013-03-30 23:45发表 [回复] [引用] [举报]
回复i9527:你好 你状态栏怎么搞成透明的,能交流下么,Q506011089
发表评论
  • 用 户 名:
  • cosmoslhf
  •   
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
id="ad_frm_1" style="BORDER-LEFT-WIDTH: 0px; OVERFLOW: hidden; HEIGHT: 0px; BORDER-RIGHT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; WIDTH: 746px" src="http://blog.csdn.net/common/ad.html?t=5&containerId=ad_bot&frmId=ad_frm_1" frameborder="0" scrolling="no">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值