要修改statusbar样式,首先要注意以下几点:
1、状态栏的图标是如何控制的;
2、状态栏背景;
3、状态栏上日期、时间颜色等。
1、图标
我们先来分析第一个,这是重点!首先我们要找到源文件目录和资源文件目录,源文件目录(frameworks/base/services/java/com/android/server/status)资源文件目录(/frameworks/base/core/res/res/layout)。好了,在源码目录我们看到StatusBarPolicy这个类里面有很多的静态数组比如:
- // wifi
- private static final int[] sWifiSignalImages = new int[] {
- com.android.internal.R.drawable.stat_sys_wifi_signal_1,
- com.android.internal.R.drawable.stat_sys_wifi_signal_2,
- com.android.internal.R.drawable.stat_sys_wifi_signal_3,
- com.android.internal.R.drawable.stat_sys_wifi_signal_4,
- };
- //GSM/UMTS
- private static final int[] sDataNetType_g = new int[] {
- com.android.internal.R.drawable.stat_sys_data_connected_g,
- com.android.internal.R.drawable.stat_sys_data_in_g,
- com.android.internal.R.drawable.stat_sys_data_out_g,
- com.android.internal.R.drawable.stat_sys_data_inandout_g,
- };
- private static final int[] sDataNetType_3g = new int[] {
- com.android.internal.R.drawable.stat_sys_data_connected_3g,
- com.android.internal.R.drawable.stat_sys_data_in_3g,
- com.android.internal.R.drawable.stat_sys_data_out_3g,
- com.android.internal.R.drawable.stat_sys_data_inandout_3g,
- };
- private static final int[] sDataNetType_e = new int[] {
- com.android.internal.R.drawable.stat_sys_data_connected_e,
- com.android.internal.R.drawable.stat_sys_data_in_e,
- com.android.internal.R.drawable.stat_sys_data_out_e,
- com.android.internal.R.drawable.stat_sys_data_inandout_e,
- };
看到了吧,代码中就是对资源图片的引用,基本的,要修改图片就按照StatusBarPolicy.java这个文件中的资源引用一个个对上就OK了,将要修改的图片替换drawable-hdpi这个文件中。
2、背景
在status_bar.xml文件中,很明显背景是一张名叫:statusbar_background.png的图片,在drawable-hdpi中找到替换成自己想要的背景就OK了。
- <com.android.server.status.StatusBarView xmlns:android="http://schemas.android.com/apk/res/android"
- android:background="@drawable/statusbar_background"
- android:orientation="vertical"
- android:focusable="true"
- android:descendantFocusability="afterDescendants"
- >
3、状态栏时间颜色等
我们看代码,不难发现,同样在status_bar.xml这个文件中,id为tickerText和date的标签中,在textColor这个属性中设置了字体颜色,我直接将其改为白色,即:#FFFFFFFF,关于这个值如果不太懂,请到网上查询。改了之后make,看看效果如何,如果您顺利,可以看到结果和您预想的一样,怎么了?如果statusbar背景是黑色的,怎么时间不见了?不是改过颜色了吗?嘿嘿,您没改!继续看代码,在文件StatusBarIcon.java中看到有如下一段代码:
- switch (data.type) {
- case IconData.TEXT: {
- TextView t;
- t = new TextView(context);
- mTextView = t;
- LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.WRAP_CONTENT,
- LinearLayout.LayoutParams.FILL_PARENT);
- t.setTextSize(16);
- t.setTextColor(0xFF000000);
- t.setTypeface(Typeface.DEFAULT_BOLD);
- t.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
- t.setPadding(6, 0, 0, 0);
- t.setLayoutParams(layoutParams);
- t.setText(data.text);
- this.view = t;
- break;
- }
没错,就是t.setTextColor(0xFF000000);这个搞的,好了,将它继续修改为白色编译整个状态栏的样式修改就完成了。