我想通过编写应用程序来更改状态栏的背景颜色。我的Android设备有黑色,我想将其改为其他颜色。我在这里看到了一些与之相关的帖子,但是他们正在讲述通知背景。
如果有人知道这件事,请帮助我。
默认状态栏
使用drawable作为状态栏的背景
答案 0 :(得分:13)
很抱歉,除非您要制作自定义ROM,否则无法进行此操作,除非您只想更改应用的状态栏。
这需要大量的工作。
首先,您需要将Theme.NoTitleBar.Fullscreen添加到清单
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
>
然后,一旦你完成了,你需要创建一个代表状态栏的标准布局,这意味着你必须添加时间,并且还接收来自其他应用程序的所有通知,我个人不知道如何这样做,但我确信有办法。
如果你真的想要做这个好事,那你就很难过。
很抱歉,除非您知道如何构建自定义ROMS,否则我认为这不可能
答案 1 :(得分:12)
这可以在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);
答案 2 :(得分:7)
在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));`
答案 3 :(得分:1)
IF 你想更新Lollipop上的状态栏颜色而不升级你的ADT和SDK以及所有相关的东西,你可以使用反射来达到API 21(Lollipop)及更高版本的方法< / p>
在您的活动中:
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
在你的SDK中,你可以从文档中获得它的价值,就像我用做的那样
WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
希望这有帮助
答案 4 :(得分:0)
styles.xml
最近已更改为 themes.xml
,因此此处的大部分答案已过时。您现在只需将这行代码添加到 themes.xml
文件中即可将状态栏颜色更改为绿色:
<item name="android:statusBarColor">@color/black</item>