如何更改android状态栏的背景颜色

时间:2012-01-28 11:40:26

标签: android statusbar

我想通过编写应用程序来更改状态栏的背景颜色。我的Android设备有黑色,我想将其改为其他颜色。我在这里看到了一些与之相关的帖子,但是他们正在讲述通知背景。

如果有人知道这件事,请帮助我。

默认状态栏

enter image description here

使用drawable作为状态栏的背景

enter image description here

5 个答案:

答案 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>