我希望编写一个应用程序来改变状态栏的背景颜色。我的安卓设备状态栏是黑色的,但我想将它改成其他颜色。我在这里看到了一些相关帖子,但它们都是关于通知背景的。如果有人知道如何实现,请帮助我。
默认状态栏:
使用绘图作为状态栏背景后的效果:
![enter image description here](https://istack.dev59.com/k6Kzp.webp)
默认状态栏:
![enter image description here](https://istack.dev59.com/DGTX0.webp)
![enter image description here](https://istack.dev59.com/k6Kzp.webp)
在 styles.xml 文件中执行以下操作:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="colorPrimary">@color/color_primary</item>
<item name="colorPrimaryDark">@color/color_secondary</item>
<item name="colorAccent">@color/color_accent</item>
<!---Below is the code for status bar color------>
<item name="android:statusBarColor">@color/color_primary</item>
</style>
</resources>
在values-v21/styles.xml中添加以下内容,以在Lollipop及更高版本上启用此功能。Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(activity.getResources().getColor(R.color.example_color));
很抱歉,除非你要制作自定义ROM,否则这是不可能的,除非你仅想为你的应用更改状态栏。
这将需要大量工作。
首先,您需要将Theme.NoTitleBar.Fullscreen添加到您的清单中。
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
>
然后,一旦你完成了这个步骤,你需要创建一个标准的布局来表示状态栏,这意味着你必须添加时间,并且接收来自其他应用程序的所有通知,我个人不知道如何做到这一点,但我相信有办法。
如果你真的想做到这一点,祝你好运,你将面临艰难的挑战。
抱歉,除非你具备构建定制ROM的知识,否则我认为这是不可能的。
这可以在Kitkat及之后的版本上实现。
如果您想在应用程序中使用它(就像您所要求的那样),您可以使用这个库https://github.com/jgilfelt/SystemBarTint
您只需编写:
// set a custom tint color for all system bars
tintManager.setTintColor(Color.parseColor("#99000FF"));
// set a custom navigation bar resource
tintManager.setNavigationBarTintResource(R.drawable.my_tint);
// set a custom status bar drawable
tintManager.setStatusBarTintDrawable(MyDrawable);
styles.xml
最近已经更改为 themes.xml
,因此这里的大部分答案都已过时。现在你只需在 themes.xml
文件中添加以下代码行就可以将状态栏颜色更改为绿色:
<item name="android:statusBarColor">@color/black</item>
if (Build.VERSION.SDK_INT >= 21) {
Window window = getWindow();
// original code, works on Lollipop SDKs
// window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
// window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// window.setStatusBarColor(getResources().getColor(YOUR_COLOR));
try {
// to work on old SDKs
int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = 0x80000000;
window.addFlags(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
Class<?> cls = window.getClass();
Method method = cls.getDeclaredMethod("setStatusBarColor",
new Class<?>[] { Integer.TYPE });
method.invoke(window, Res.color(theme.statusColor));
} catch (Exception e) {
// upgrade your SDK and ADT :D
}
}
我的当前最低API是15,如果你找不到
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS