如何更改android状态栏的背景颜色
Posted
技术标签:
【中文标题】如何更改android状态栏的背景颜色【英文标题】:How to change the background color of android status bar 【发布时间】:2012-02-21 03:09:15 【问题描述】:我想通过写一个应用来改变状态栏的背景颜色。我的安卓设备是黑色的,我想把它改成其他颜色。我在这里看到了一些与之相关的帖子,但它们都在讲述通知背景。
如果有人知道这件事,请帮助我。
默认状态栏
使用可绘制对象作为状态栏的背景后
【问题讨论】:
【参考方案1】:在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));
【讨论】:
对不起!如何通过xml使用drawbles。我需要设置一个渐变。 . .【参考方案2】:抱歉,除非您要制作自定义 ROM,否则这是不可能的,除非您只想为您的应用更改状态栏。
这需要大量的工作。
首先,您需要将 Theme.NoTitleBar.Fullscreen 添加到清单中
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
>
那么一旦你完成了你需要创建一个代表状态栏的标准布局,这意味着你必须添加时间,并且还要接收来自其他应用程序的所有通知,我个人不知道如何这样做,但我确信有办法。
如果你真的想走好运,那么你将面临一个艰难的时期。
抱歉,除非您知道如何构建自定义 ROM,否则我认为这是不可能的
【讨论】:
【参考方案3】:这在 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);
【讨论】:
【参考方案4】:styles.xml
最近更改为themes.xml
,因此这里的大多数答案都已过时。您现在只需将这行代码添加到themes.xml
文件即可将状态栏颜色更改为绿色:
<item name="android:statusBarColor">@color/black</item>
【讨论】:
【参考方案5】:如果您想更新 Lollipop 上的状态栏颜色而不升级您的 ADT 和 SDK 以及所有相关的东西,您可以使用反射来达到 API 21 (Lollipop) 和更高版本的方法
在你的活动中:
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
希望这有帮助
【讨论】:
不适用于 17: java.lang.NoSuchMethodException: setStatusBarColor [int]以上是关于如何更改android状态栏的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章