Android 半透明状态栏在 fitsSystemWindows 中始终为灰色,目标为 API 28 (Android 9)
Android translucent status bar is always gray with fitsSystemWindows when targeting API 28 (Android 9)
从API 21开始,当样式包含<item name="android:windowTranslucentStatus">true</item>
且布局包含android:fitsSystemWindows="true"
时,状态栏变为半透明,抽屉布局(如导航抽屉)在状态后面滑动酒吧。在目标 API 28 之前,状态栏的基色将由 colorPrimaryDark
或 android:statusBarColor
设置。现在这些值被忽略了。
这个问题实际上是在com.android.support:design:27.1.0
中出现的,但当时我认为这是一个错误并继续使用com.android.support:design:27.0.2
。随着结转至 API 28,这似乎是一个未记录的设计更改。那么,在API>=28上使用fitsSystemWindows
时,如何设置状态栏背景色呢?
原来这个问题的答案是基本状态栏颜色现在由设置为 fitsSystemWindows
的布局项目的背景设置。然后半透明的状态栏稀松布使该颜色变暗。因此,在我的例子中,fitsSystemWindows
是在 DrawerLayout
内的 CoordinatorLayout
上指定的。在 CoordinatorLayout
上设置 android:background
允许控制基本状态栏颜色。
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent" >
<!-- `android:fitsSystemWindows="true"` moves `root_coordinatorlayout` below the system status bar.
When it is specified, the theme should include `<item name="android:windowTranslucentStatus">true</item>`.
`android:background` sets the background color of the status bar, which is then overlaid with a scrim. -->
<android.support.design.widget.CoordinatorLayout
android:id="@+id/root_coordinatorlayout"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.my.acivity"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:fitsSystemWindows="true"
android:background="#FF64DD17" >
<!-- The purpose of the `LinearLayout` is to place the included `main_webview` below `app_bar_layout`. -->
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical" >
<!-- The `AppBarLayout` theme has to be defined here because the activity uses a `NoActionBar` theme. -->
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:theme="@style/AppBarLight" >
<android.support.v7.widget.Toolbar
android:id="@+id/app_bar"
android:layout_height="wrap_content"
android:layout_width="match_parent" />
</android.support.design.widget.AppBarLayout>
<!-- Include the main views. -->
<include layout="@layout/main_views" />
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
<!-- The left drawer. -->
<android.support.design.widget.NavigationView
android:id="@+id/navigationview"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
app:headerLayout="@layout/navigation_header"
app:menu="@menu/webview_navigation_menu"
app:itemIconTint="?attr/navigationIconTintColor" />
<!-- Include the right drawer. -->
<include layout="@layout/right_drawer" />
稀松布采用 #FF64DD17
并将其变暗至 #FF3C850E
。
当抽屉打开时,额外的稀松布覆盖了抽屉后面的整个应用程序,使状态栏更暗 #FF183405
。
从API 21开始,当样式包含<item name="android:windowTranslucentStatus">true</item>
且布局包含android:fitsSystemWindows="true"
时,状态栏变为半透明,抽屉布局(如导航抽屉)在状态后面滑动酒吧。在目标 API 28 之前,状态栏的基色将由 colorPrimaryDark
或 android:statusBarColor
设置。现在这些值被忽略了。
这个问题实际上是在com.android.support:design:27.1.0
中出现的,但当时我认为这是一个错误并继续使用com.android.support:design:27.0.2
。随着结转至 API 28,这似乎是一个未记录的设计更改。那么,在API>=28上使用fitsSystemWindows
时,如何设置状态栏背景色呢?
原来这个问题的答案是基本状态栏颜色现在由设置为 fitsSystemWindows
的布局项目的背景设置。然后半透明的状态栏稀松布使该颜色变暗。因此,在我的例子中,fitsSystemWindows
是在 DrawerLayout
内的 CoordinatorLayout
上指定的。在 CoordinatorLayout
上设置 android:background
允许控制基本状态栏颜色。
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent" >
<!-- `android:fitsSystemWindows="true"` moves `root_coordinatorlayout` below the system status bar.
When it is specified, the theme should include `<item name="android:windowTranslucentStatus">true</item>`.
`android:background` sets the background color of the status bar, which is then overlaid with a scrim. -->
<android.support.design.widget.CoordinatorLayout
android:id="@+id/root_coordinatorlayout"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.my.acivity"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:fitsSystemWindows="true"
android:background="#FF64DD17" >
<!-- The purpose of the `LinearLayout` is to place the included `main_webview` below `app_bar_layout`. -->
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical" >
<!-- The `AppBarLayout` theme has to be defined here because the activity uses a `NoActionBar` theme. -->
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:theme="@style/AppBarLight" >
<android.support.v7.widget.Toolbar
android:id="@+id/app_bar"
android:layout_height="wrap_content"
android:layout_width="match_parent" />
</android.support.design.widget.AppBarLayout>
<!-- Include the main views. -->
<include layout="@layout/main_views" />
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
<!-- The left drawer. -->
<android.support.design.widget.NavigationView
android:id="@+id/navigationview"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
app:headerLayout="@layout/navigation_header"
app:menu="@menu/webview_navigation_menu"
app:itemIconTint="?attr/navigationIconTintColor" />
<!-- Include the right drawer. -->
<include layout="@layout/right_drawer" />
稀松布采用 #FF64DD17
并将其变暗至 #FF3C850E
。
当抽屉打开时,额外的稀松布覆盖了抽屉后面的整个应用程序,使状态栏更暗 #FF183405
。