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

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

分类: Android2012-06-30 14:45 23687人阅读 评论(8) 收藏 举报

androidsignal代码分析iconseclipse平台

在上一篇文章《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的加载以及工作流程。敬请关注

时间: 2024-12-16 11:54:39

Android 4.0 ICS SystemUI浅析——StatusBar结构分析的相关文章

使用 VirtualBox 虚拟机在电脑上运行 Android 4.0 系统,让电脑瞬间变安卓平板

Ref: http://www.iplaysoft.com/android-v4-ics-for-virtualbox.html 随着?Android?手机的各种软件应用越来越多,很多没有购买的朋友都纷纷表示想要试一试.虽然官方的Android SDK开发包中附带有模拟器,但安装使用上较为复杂,不太适合咱们普通青年,于是我们介绍了一款更易用的BlueStacks 安卓模拟器,不过它也还有一些不爽的地方,譬如只能在 Windows 上运行,或是有时不能连接网络. 所以今天给大家介绍另外一款可以在

android 6.0 SystemUI源码分析(1)-SystemUI介绍 转

1. SystemUI介绍 SystemUI是一个系统应用,主要功能有: 1)状态栏信息显示,比如电池,wifi信号,3G/4G等icon显示 2)通知面板,比如系统消息,第三方应用消息,都是在通知面板显示. 3)近期任务栏显示面板.比如长按主页或近期任务快捷键,可以显示近期使用的应用. 4)提供截图服务.比如电源+音量加可以截图. 5)提供壁纸服务.比如壁纸的显示. 6)提供屏保服务. 7)系统UI显示.比如系统事件到来时,显示系统UI提示用户. SystemUI源码路径: framework

Android全屏(包含3种隐藏顶部状态栏及标题栏和一种隐藏Android 4.0平板底部状态栏的方法)

方法一 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 隐藏标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); // 隐藏状态栏 getWindow().setFlags(WindowManager.La

android 6.0权限全面详细分析和解决方案

原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/48371123 http://inthecheesefactory.com/blog/things-you-need-to-know-about-Android-m-permission-developer-edition/en 一.Marshmallow版本权限简介 android的权限系统一直是首要的安全

【转】Cannot find -ltinfo when compiling android 4.0.3

原文网址:http://stackoverflow.com/questions/9055005/cannot-find-ltinfo-when-compiling-android-4-0-3 up vote0down votefavorite Hi I have got a problem that I can't solve when compiling the android source for ICS. The build gets to a certain stage, then I

Android开发之动画效果浅析

Android开发之动画效果浅析 请尊重他人的劳动成果,转载请注明出处:Android开发之动画效果浅析 程序运行效果图: Android动画主要包含补间动画(Tween)View Animation.帧动画(Frame)Drawable Animation.以及属性动画Property Animation.下面依次介绍一下各个动画. 1.   补间动画(Tween) Tween动画,通过对View 的内容进行一系列的图形变换 (包括平移.缩放.旋转.改变透明度)来实现动画效果.动画效果的定义可

Android 5.0以上heads up通知

适用Android系统: 1) Android版本>= 5.0 2) 部分ROM是不支持 RemoteViews view=getRemoteViews(body,title, R.mipmap.ic_report_problem_red_24px, 0, date); if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.L){ notification.headsUpContentView=view; notification.vibrate= new

Android 6.0 SIM卡初始化流程

本文主要讲述Android 6.0 SIM卡初始化流程,这个过程也涉及到UICC框架的初始化,UICC(Universal Integrated Circuit Card)的架构图如下: /** * This class is responsible for keeping all knowledge about * Universal Integrated Circuit Card (UICC), also know as SIM's, * in the system. It is also

Android 6.0 Overview Screen实现原理

Android 4.0中添加了一个很有用的特性,那就是overView Screen功能,也就是最近任务预览功能.这个功能提供了一个列表试图,方便用户简单快捷地了解到最近使用的app或者最近进行的任务.这个功能和iOS的最近任务在界面上很相似.在android 5.0中,这个任务得到了进一步的加强,在android 5.0之前overView Screen中显示的任务快照是不可以配置的,但是在android 5.0中是可以配置的,开发者可以指定那些activity以什么样的形式,什么UI风格显示