本文实例讲述了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程序设计有所帮助。