本文实例讲述了android实现的状态栏定制和修改方法。分享给大家供大家参考。具体如下:
大家都知道定制在android开发中的重要性,因为通过定制,你才能制造出差异化的产品,才能满足更多消费者的需求,
像htc生产的手机都通过了深层次的二次开发,今天我也来分享一下我的状态栏定制。
废话不说了,直接上图:
主要更换了背景,文字颜色以及icon的显示顺序.
2. 关键代码部分
a) 代码在系统中的位置
status bar 的相关代码位于:frameworks/base/services/java/com/android/server/status。
其中statusbarpolicy类主要负责接收action动作,其他一些核心操作全部位于statusbarservice类里面
b) 代码实例:
i. 接收action
1
2
3
4
|
if (action.equals(intent.action_battery_changed)) { updatebattery(intent); } |
ii. 更新icon
1
2
3
4
5
6
|
private final void updatebattery(intent intent) { mbatterydata.iconid = intent.getintextra( "icon-small" , 0 ); mbatterydata.iconlevel = intent.getintextra( "level" , 0 ); mservice.updateicon(mbatteryicon, mbatterydata, null ); } |
c) 资源位置:
status bar 的相关资源位于:frameworks/base/core/res/res,关键布局为:base/core/res/res/layout/status_bar.xml ,
源码如下:这里可以设置notification字体颜色。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
<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" > <linearlayout android:id= "@+id/icons" android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "horizontal" > <com.android.server.status.iconmerger android:id= "@+id/notificationicons" android:layout_width= "0dip" android:layout_weight= "1" android:layout_height= "match_parent" android:layout_alignparentright= "true" android:paddingleft= "6dip" android:gravity= "center_vertical" android:orientation= "horizontal" /> <linearlayout android:id= "@+id/statusicons" android:layout_width= "wrap_content" android:layout_height= "match_parent" android:layout_alignparentleft= "true" android:paddingright= "6dip" android:gravity= "center_vertical" android:orientation= "horizontal" /> </linearlayout> <linearlayout android:id= "@+id/ticker" android:layout_width= "match_parent" android:layout_height= "match_parent" android:paddingleft= "6dip" android:animationcache= "false" android:orientation= "horizontal" > <imageswitcher android:id= "@+id/tickericon" android:layout_width= "wrap_content" android:layout_height= "match_parent" android:layout_marginright= "8dip" > <com.android.server.status.animatedimageview android:layout_width= "25dip" android:layout_height= "25dip" /> <com.android.server.status.animatedimageview android:layout_width= "25dip" android:layout_height= "25dip" /> </imageswitcher> <com.android.server.status.tickerview android:id= "@+id/tickertext" android:layout_width= "0dip" android:layout_weight= "1" android:layout_height= "wrap_content" android:paddingtop= "2dip" android:paddingright= "10dip" > <textview android:layout_width= "match_parent" android:layout_height= "wrap_content" android:singleline= "true" android:textcolor= "#ff000000" /> <textview android:layout_width= "match_parent" android:layout_height= "wrap_content" android:singleline= "true" android:textcolor= "#ff000000" /> </com.android.server.status.tickerview> </linearlayout> <com.android.server.status.dateview android:id= "@+id/date" android:layout_width= "wrap_content" android:layout_height= "match_parent" android:singleline= "true" android:textsize= "16sp" android:textstyle= "bold" android:gravity= "center_vertical|left" android:paddingleft= "6px" android:paddingright= "6px" android:textcolor= "?android:attr/textcolorprimaryinverse" android:background= "@drawable/statusbar_background" /> </com.android.server.status.statusbarview> |
3. 简单修改
对status bar 的修改主要包括status bar的背景颜色、icon、字体颜色、icon顺序等。
a) 背景颜色:
背景颜色由frameworks/base/core/res/res/drawable-mdpi/statusbar_background.9.png决定,原始颜色是灰色,我们修改为黑色。
b) icon:
icon根据不同显示项,由不同资源决定,暂时不更改。
c) 字体颜色:
由frameworks/base/services/java/com/android/server/status/ statusbaricon类中的代码控制,原始代码为:t.settextcolor(0xff000000),即黑色,我们将其更改为白色:t.settextcolor(0xffffffff)。
d) icon顺序:
由frameworks/base/core/res/res/values/array里面的资源文件控制,原始代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<string-array name= "status_bar_icon_order" > <item><xliff:g id= "id" >clock</xliff:g></item> <item><xliff:g id= "id" >secure</xliff:g></item> <item><xliff:g id= "id" >alarm_clock</xliff:g></item> <item><xliff:g id= "id" >battery</xliff:g></item> <item><xliff:g id= "id" >phone_signal</xliff:g></item> <item><xliff:g id= "id" >phone_evdo_signal</xliff:g></item> <item><xliff:g id= "id" >data_connection</xliff:g></item> <item><xliff:g id= "id" >cdma_eri</xliff:g></item> <item><xliff:g id= "id" >tty</xliff:g></item> <item><xliff:g id= "id" >volume</xliff:g></item> <item><xliff:g id= "id" >mute</xliff:g></item> <item><xliff:g id= "id" >speakerphone</xliff:g></item> <item><xliff:g id= "id" >wifi</xliff:g></item> <item><xliff:g id= "id" >tty</xliff:g></item> <item><xliff:g id= "id" >bluetooth</xliff:g></item> <item><xliff:g id= "id" >gps</xliff:g></item> <item><xliff:g id= "id" >sync_active</xliff:g></item> <item><xliff:g id= "id" >sync_failing</xliff:g></item> <item><xliff:g id= "id" >ime</xliff:g></item> </string-array> |
我们将battery与clock的位置更换。
希望本文所述对大家的android程序设计有所帮助。