Android实现的状态栏定制和修改方法
本文实例讲述了android实现的状态栏定制和修改方法。分享给大家供大家参考。具体如下:
大家都知道定制在android开发中的重要性,因为通过定制,你才能制造出差异化的产品,才能满足更多消费者的需求,
像htc生产的手机都通过了深层次的二次开发,今天我也来分享一下我的状态栏定制。
废话不说了,直接上图:
主要更换了背景,文字颜色以及icon的显示顺序.
2. 关键代码部分
a) 代码在系统中的位置
status bar 的相关代码位于:frameworks/base/services/java/com/android/server/status。
其中statusbarpolicy类主要负责接收action动作,其他一些核心操作全部位于statusbarservice类里面
b) 代码实例:
i. 接收action
if (action.equals(intent.action_battery_changed)) { updatebattery(intent); }
ii. 更新icon
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字体颜色。
<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里面的资源文件控制,原始代码如下:
<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程序设计有所帮助。