状态栏颜色未显示 - 5.0 Lollipop Android Studio:(AppCompat-v7:r21)

时间:2014-10-23 07:00:22

标签: android android-studio statusbar android-5.0-lollipop android-appcompat

我在Android Studio中使用Android版Lollipop的AppCompat-v7:21.0.0支持库。我的问题是,通过在colorPrimaryDark文件中设置values/styles.xml可以更改的状态栏颜色在xml布局预览和模拟器中都显示为黑色。

那有什么不对?我错过了什么吗?请告诉我。感谢。

编辑: 我知道在Pre-Lollipop版本上更改状态栏颜色是不可能的。我的XML Layout Editor Preview和my Emulator都设置为API Level 21(5.0 Lollipop)。但是,状态栏仍然不是我在colorPrimaryDark中设置的颜色。我尝试在statusBarColor中执行styles.xml但无济于事。它仍然是黑色的。

另外: 我在类似的问题上看到了其中一个答案,他们建议我将minSdkVersion放到21。我试过了,但是没有用。我希望我的应用程序能够在API级别为15及以上的设备上运行。

10 个答案:

答案 0 :(得分:35)

请阅读:要使此操作生效,窗口必须使用

绘制系统栏背景
android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
不得设置

Source

如果您不知道如何添加该标志:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

答案 1 :(得分:34)

这对我有用:

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        getWindow().setStatusBarColor(getResources().getColor(R.color.some_color));
    }

答案 2 :(得分:12)

您是否将目标SDK版本设置为21?当我将目标SDK版本保留为19时,我遇到了同样的问题。您可以将最小的SDK保留在更低的值。

当然,您需要从正确的主题继承并确保您的Activity使用它。

答案 3 :(得分:6)

检查您是否正在编辑styles.xml文件夹中的values-v21。如果您将SDK版本设置为 21 ,那么它将不会在styles.xml文件夹中查找values(但它应该这样做)。

enter image description here

答案 4 :(得分:6)

测试我的nexus7 5.1.1

在style.xml中设置v21 / v22不起作用

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/holo_red_dark</item>

设置为actvivity

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    getWindow().setStatusBarColor(getResources().getColor(android.R.color.holo_red_dark));
}

对我有用

答案 5 :(得分:3)

通过设置colorPrimaryDark,无法更改pre-Lollipop(5.0)中的状态栏颜色。请参阅this article

  

在较旧的平台上,AppCompat尽可能模拟颜色主题。目前仅限于为操作栏和一些小部件着色。

答案 6 :(得分:1)

在我的情况下,values-v21/styles.xml包含以下行,该行覆盖values/style.xml中使用colorPrimaryDark定义的状态栏颜色:

<item name="android:statusBarColor">@android:color/transparent</item>

删除它对我有用。

答案 7 :(得分:0)

v22-appcompat他们(Android)现在已经在android studio预览中添加了状态栏颜色的渲染!

关于时间......无论如何,请确保您的appcompat库已更新到最新版本,即v22.0。+。

干杯!

答案 8 :(得分:0)

我正在开发一款旧应用并尝试将其转换为素材风格。代码和一切都很好但是我唯一的错误就是阻碍状态栏上的&gt; = Lollipop设备在 build.gradle “TargetSDKVersion”。它设置为少于21.我将其更改为21并且状态栏着色开始工作。

答案 9 :(得分:0)

这对我有用。 从样式中删除状态栏颜色。 添加标志,然后将您想要的颜色添加到其中

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    getWindow().setStatusBarColor(getResources().getColor(R.color.your_color));
}