Android StatusBar 更改

    本文只是简单修改statusbar样式,我的做法是将Android2.1状态栏样式修改为Android2.3的样式,看到本文的可以拍拍砖,因为这是在太简单了...

    要修改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了。

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);这个搞的,好了,将它继续修改为白色编译整个状态栏的样式修改就完成了。

你可能感兴趣的:(Android)