最近修改statusBar,需要在上面添加自定义的字符。
版本:android-2.3.1
--------------------------------------------------
1.先参考statusbar上时间的布局文件:
frameworks\base\packages\SystemUI\res\layout\status_bar.xml
<LinearLayout android:id="@+id/statusIcons"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:paddingRight="6dip"
android:gravity="center_vertical"
android:orientation="horizontal"/>
<com.android.systemui.statusbar.Clock
android:textAppearance="@*android:style/TextAppearance.StatusBar.Icon"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:singleLine="true"
android:paddingRight="6dip"
android:gravity="center_vertical|left"
/>
<com.android.systemui.statusbar.HandSetNum //我们所需要显示的字符
android:textAppearance="@*android:style/TextAppearance.StatusBar.Icon"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textSize="14sp"
android:gravity="center_vertical"
android:paddingLeft="10dip"
android:paddingRight="10dip"
/>
注释: <com.android.systemui.statusbar.Clock
<com.android.systemui.statusbar.HandSetNum
意思很明确,就是在statusbar目录下添加一个类名文件,我们参考closk,在
\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\下创建一个HandSetNum.java 文件,里面内容基本跟clock.java一样。
android:gravity="center_vertical" :意思就是在组件里面的位置
android:layout_gravity="center_vertical" :指组件在layout的位置。
android:paddingLeft="10dip" :离组件边距
android:paddingRight="10dip"
2.编写HandSetNum.java
public class HandSetNum extends TextView {
private boolean mAttached;
public HandSetNum(Context context) {
this(context, null);
}
public HandSetNum(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public HandSetNum(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (!mAttached) {
mAttached = true;
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_HANDSET_NUM);
getContext().registerReceiver(mIntentReceiver, filter, null, getHandler());
}
updateHandSetNum();
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (mAttached) {
getContext().unregisterReceiver(mIntentReceiver);
mAttached = false;
}
}
private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_HANDSET_NUM)) {
updateHandSetNum();
}
}
};
final void updateHandSetNum() {
setText("Hs:1");
}
}//end HandSetNum
基本跟clock.java代码相同,主要以setText();来实现字符的显示。
3.编译android源码
分享到:
相关推荐
本教程将深入讲解如何在状态栏上实现滚动文本的效果,这对于开发者来说是一种独特且吸引用户注意力的方式。 首先,我们需要了解滚动文本的基本原理。滚动文本通常是通过循环播放文本字符串来实现的,就像一个小型的...
- `setTitle()` 和 `setStatusBar()` 方法用于控制Activity的标题栏和状态栏的显示。在调用 `setCurrentView()` 之前,可以使用 `requestWindowFeature(Window.FEATURE_NO_TITLE)` 来隐藏标题栏,实现全屏效果。 -...
这里定义了一个字符串数组,包含了所有可能出现在状态栏上的图标ID。 在`StatusBarManagerService.java`中,会创建一个`StatusBarIconList`对象,并通过调用`defineSlots`方法来初始化这个列表: ```java ...
- 可以设置是否显示导航栏 (`not_navigation_bar`) 和状态栏 (`not_status_bar`),以及4G模块型号 (`module_4G`)。 - 控制是否为系统默认启动器 (`default_launcher`),系统是否已root (`has_root`),以及USB ...
在上面的代码中,状态栏(StatusBar)没有被包含在截屏内。通常,需要额外处理以获取包含状态栏的全屏截图。 - 另外,为了提高性能和节省内存,可以考虑使用`Bitmap.createBitmap(View, int, int, int, int)`来只...
- **数据操作**:如flutter_image_compress用于图片压缩,flutter_statusbar_manager管理状态栏。 - **设备交互**:如device_info获取设备信息,keyboard_visibility监听键盘状态,image_picker和image_picker_saver...