将 SDK 设置为 27 后,状态栏颜色在活动中始终为灰色



自从使用 sdk 26 或 27 以来,还有其他人遇到状态栏始终为灰色的问题吗?我最近更新了 Android Studio,并使用 27 作为我的目标 sdk,现在每个启动的活动都有一个灰色状态栏。我没有改变样式或主题,但它们总是灰色的。

另一个有趣的发展是我的 MainActivity 在那里有一个导航抽屉,它在我的原色上呈现半透明状态没有问题。但是我从那里启动的每个活动总是有灰色的状态栏。我完全不知道为什么,但我假设它是SDK版本,因为我以前没有遇到任何问题。

每个活动都引用此样式,该样式过去适用于主活动和所有其他活动:

<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">true</item>
</style>

我可以通过删除半透明标志并在 xml 中手动设置状态栏颜色来解决灰色问题。但是,这现在打破了半透明状态栏下方 MainActivity 的导航抽屉开口(它只是纯色)。在一个完美的世界里,我希望在所有活动中使用半透明的状态栏而不是我的原色。

任何帮助将不胜感激!

更新:如果我使用 SDK 27 并使用它更新支持依赖项,我可以确认问题会自行显现。如果我回到 SDK 26 版本,问题似乎消失了。我们需要注意与 27 特别相关的内容吗?

在你的样式中添加这一行.xml(v21):

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

它可能会解决您的问题。

正如我在评论中所说,我遇到了类似的问题,仅在 API27 中才开始显现出来。状态栏不是特别灰色的 - 它只是透明的。

我的特别解决方案是我的values-v21文件夹中的styles.xml如下:-

<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>

删除android:statusBarColor行为我解决了这个问题。

我将其作为答案发布的原因是,在早期的 API 版本中,这个不稳定的行没有影响状态栏 - 这本身可能是一个单独的问题。似乎该问题已在API27中得到解决,这就是为什么状态栏现在显示为透明的原因。

API 27 也有同样的问题。

在样式.xml(v21)中,我有:

<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowActivityTransitions">true</item>
</style> 

然后我在应用程序的根布局中添加了这个:

android:background="@color/colorPrimary"
android:fitsSystemWindows="true"

这解决了我的问题。

我正在使用第二个CoordinatorLayout来包装应用栏,如本答案所示,因为没有在状态栏上显示应用栏的阴影

正如我所看到的,问题是根CoordinatorLayout绘制在状态栏后面,以白色作为背景,但应用栏不是。

编辑:经过一些测试,我可以说在样式中使用.xml(21): @android:彩色/透明

<item name="android:windowTranslucentStatus">true</item> 

并在我的根布局中使用:

android:background="@color/colorPrimaryDark"

产生更好的色彩感觉。

它在 SDK 28 中仍然不起作用,但设置背景是解决此问题的一个很好的解决方案,例如:

<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/primary"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/defaultBackground"
android:orientation="vertical">
<!-- Some content -->
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>

最新更新