如何更改状态栏颜色以匹配Lollipop中的应用程序?[Android]


96

在新的Lollipop更新中,我注意到使用本地Google应用程序时,状态栏的颜色会发生变化,以匹配您正在运行的应用程序上的操作栏。我也看到它也在Twitter应用程序上,所以我猜测不是只有谷歌才能做到这一点。

有谁知道如何做到这一点?

Answers:


220

要更改状态栏颜色,请使用setStatusBarColor(int color)。根据javadoc,我们还需要在窗口上设置一些标志。

工作代码段:

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(ContextCompat.getColor(activity, R.color.example_color));


请记住,根据Material Design准则,状态栏颜色和操作栏颜色应该不同:

  • ActionBar应该使用原色500色
  • StatusBar应该使用主色700

看下面的截图:

在此处输入图片说明


4
请注意,效果可能不会在模拟器中显示。例如,此示例项目在Nexus 9上设置状态栏,但在Android 5.0模拟器上不设置。
CommonsWare 2014年

1
@mate:我指的是Android SDK仿真器。很高兴知道它正在Genymotion上工作。
CommonsWare,2014年

3
@Azad不,没有。要使用上述代码段,您必须确保您的设备在API 21或更高版本上运行。
klimat

1
我正在做一个相对简单的项目,我必须说我刚刚使用过getWindow().setStatusBarColor(activity.getResources().getColor(R.color.example_color));,并且效果很好。不确定标志是严格必需的上下文。
Joaquin Iurchuk 2015年

3
我也想在棒棒糖之前的设备中显示颜色。如何做呢?
WISHY

48

只需在您的styles.xml中添加它即可。colorPrimary用于操作栏,而colorPrimaryDark用于状态栏。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:colorPrimary">@color/primary</item>
    <item name="android:colorPrimaryDark">@color/primary_dark</item>
</style>

来自开发人员android的这张图片解释了有关颜色调色板的更多信息。您可以在此链接上阅读更多内容。

在此处输入图片说明


Android Studio为每个项目创建以下条目:<color name="colorPrimary">#somecolor</color><color name="colorPrimaryDark">#somecolor</color>。可以更改它们以获得所需的效果。
神经递质

41

设置状态栏颜色的另一种方法是通过style.xml

为此,请在res / values-v21文件夹下创建具有以下内容的style.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Material">
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="android:colorPrimaryDark">@color/blue_dark</item>
    </style>
</resources>

编辑:如注释中所指出,使用AppCompat时代码是不同的。在文件res / values / style.xml中,改用:

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">   
    <!-- Set AppCompats color theming attrs -->
    <item name="colorPrimary">@color/my_awesome_red</item>
    <item name="colorPrimaryDark">@color/my_awesome_darker_red</item>
    <!-- Other attributes -->
</style>

1
做过某事。但是没有用。但是然后我使用AppCompat而不是Material。
马丁

3
@Martin对于appcompat,请使用不带android前缀的colorPrimaryDark。
米歇尔

也不适用于appcompat(在18级上测试)
Mohammad Zekrallah '16

状态栏颜色仅在OS API Level 21及更高版本的设备上起作用。另外,请确保您没有在个人活动中覆盖此样式。
莱文

对于inappbrowser,如何更改与应用程序颜色相同的搜索

23

要设置状态栏颜色,请在res / values-v21文件夹下创建具有以下内容的style.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppBaseTheme" parent="AppTheme">
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@color/blue</item>
    </style>

</resources>

它说无法解析符号windowDrawsSystemBarBackgrounds
jmhostalet


4

另外,如果您想status-bar为不同的活动(片段)使用不同的颜色,则可以执行以下步骤(使用API​​ 21及更高版本):

首先创建values21/style.xml并放置以下代码:

 <style name="AIO" parent="AIOBase">
            <item name="android:windowDrawsSystemBarBackgrounds">true</item>
            <item name="android:windowContentTransitions">true</item>
    </style>

然后values/style.xml按照以下方式定义White | Dark主题:

 <style name="AIOBase" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_primary_dark</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:textColorPrimary">@android:color/black</item>
        <item name="android:statusBarColor" tools:targetApi="lollipop">@color/color_primary_dark
        </item>
        <item name="android:textColor">@color/gray_darkest</item>
        <item name="android:windowBackground">@color/default_bg</item>
        <item name="android:colorBackground">@color/default_bg</item>
    </style>


    <style name="AIO" parent="AIOBase" />

    <style name="AIO.Dark" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#171717
        </item>
    </style>

    <style name="AIO.White" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#bdbdbd
        </item>
    </style>

另外,别忘了在主题中应用主题manifest.xml


2

在Android之前的Lollipop设备中,您可以从SystemBarTintManager进行操作。 如果您使用的是android studio,则只需在gradle文件中添加Systembartint lib。

dependencies {
    compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
    ...
}

然后在你的活动中

// create manager instance after the content view is set
SystemBarTintManager mTintManager = new SystemBarTintManager(this);
// enable status bar tint
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setTintColor(getResources().getColor(R.color.blue));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.