我在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及以上的设备上运行。
答案 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
(但它应该这样做)。
答案 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));
}