如何更改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状态栏的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在启动阶段设置状态栏的背景颜色[重复]

如何将背景颜色设置为透明状态栏

如何根据代号中的不同形式更改状态栏的颜色?

如何自定义状态栏图标和文字颜色?例如。状态栏背景:白色,状态栏图标颜色,文字:红色

如何更改 iPhone 应用程序中状态栏的颜色? [复制]

如何更改导航栏的默认背景颜色? [复制]