SystemUI
在Android4.3或以前版本,SystemUI是分为Tablet和Phone两种不同代码文件的,在Android4.4已经整合了phone和tablet,统一为phone,只区分phone和tv。对于Phone来说SystemUI指的是:StatusBar(状态栏)、NavigationBar(导航栏)。
启动后Phone界面上的信号,蓝牙标志,Wifi标志等等这些状态显示标志都会在StatusBar上显示。当我们的设备开机后,首先需要给用户呈现的就是各种界面同时也包括了我们的SystemUI,因此对于整个Android系统来说,SystemUI都有举足轻重的作用。
StatusBar和NavigationBar都是在
/SourceCode/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java的start()方法中,完成初始化并显示到界面上的。
1.分辨率
适配不同分辨率需要修改的文件主要有:navigation_bar.xml、以及values-swXXXdp下的dimens.xml。
1.1. navigation_bar.xml(导航栏)
只要修改几个虚拟按键的大小和边距,sw600dp上面的布局:android:layout_width="128dp" android:paddingLeft="25dp" android:paddingRight="25dp",因为默认的导航栏是水平放置,所以使用的边距是paddingLeft,如果是竖直放置就用paddingTop。
现在有几种分辨率就有几个navigation_bar.xml,在修改增加分辨率的时候会很麻烦,实际上可以用dimen来给这些大小和边距布局,例如:android:layout_width="@dimen/virtualButtonWidth" android:paddingLeft="@dimen/virtualButtonpaddingLeft" android:paddingRight="@dimen/virtualButtonpaddingRight"
然后在value-swXXXdp目录下的dimen.xml文件下定义对应的值,例如<dimen name="virtualButtonWidth">128dp</dimen>等。以后在增加修改分辨率的时候,就不需要在navigation_bar.xml里面一个一个地修改了。实际上除了navigation_bar.xml的布局,其他布局文件都使用了dimen来定义大小。
Android系统默认在600dp以上分辨率才会显示导航栏,可以在PhoneWindowManager.java中修改mNavigationBarCanMove = shortSizeDp < 600为mNavigationBarCanMove = shortSizeDp < 480,那么就能在480dp上显示导航栏。
1.2. values-swXXXdp
目前dimens.xml中主要定义了通知栏和快捷设置的(