半透明のシステム バーを正しい方法で – API レベルとテーマを問わず
半透明のステータス バーとナビゲーション バーを v21+ で暗いテーマと明るいテーマで端から端まで描画する方法。
Gesture Navigation- Going Edge to Edge (I)
コンテンツをシステム バーの背後に描画したいので、
- 半透明が必要です
- 現在のテーマに応じて、ナビゲーション バーとステータス バーに暗いまたは明るいスクリムを使用する必要があります。
Capability
- Fully configurable statusBarColor
しかし、ステータスバーのアイコンは白色のままなので、暗い色の使用は制限されています。 - windowTranslucentStatus true は statusBarColor を上書きし、変更できない固定の暗い縁取りを適用します。
- Fully configurable navigationBarColor
But we are limited to use dark colors as the navigation buttons remain white colored. - windowTranslucentNavigation true は navigationBarColor を上書きし、変更できない固定の暗い縁取りを適用します。
- ステータス バー アイコン & ナビゲーション バー ボタンが常に明るいまま。
v23+
- windowLightStatusBar
ステータス バーのアイコンを暗くする
v27+
- windowLightNavigationBar
ナビゲーション バーのボタンを暗くすることができるようになりました。
Solution
注意: 我々は透過的な statusBarColor を使用する予定です。 なぜなら、代わりに AppBar を使用して StatusBar に色を付けるからです。 AppBar は statusBar の領域をカバーするので、関連する背景を直接 AppBar に設定すれば十分でしょう。
あなたの実装では、これは上部にある任意のビューにすることができます。 画面の上部にビューがない場合、代わりに statsuBarColor 属性を使用することができます。
基本値:
AppBarLayout:
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/moviesAppBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/status_bar_scrim"
android:theme="@style/Widget.AppTheme.AppBar"
app:elevation="2dp"
app:layout_constraintTop_toTopOf="parent"> <androidx.appcompat.widget.Toolbar
android:id="@+id/moviesToolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
app:title="Popular Movies" />
</com.google.android.material.appbar.AppBarLayout>
v21 – v22:
- windowTranslucentStatus と windowTranslucentNavigation はシステムで暗いスクリムを適用するので無視することにします。
- statusBar と navigationBar のアイコンは白色のままです。
- つまり、暗い背景/スクリムしか使用できません。
Light テーマの場合、colorSurface は light/white になります。基本的に、v21-22 では、ライト テーマのシステム バーをあまりうまく処理できません。 そのため、暗い背景のみを使用することになります。
Use same background for dark and light themes.
We can work our way by using dark backgrounds for dark and light themes.を参照してください。
Light テーマの場合:
この暗い縁は AppBar にも適用されるので (背後に描画する場合!)、AppBar に ThemeOverlay.Dark を使用する必要があります。values-night
v23 – v26:
ステータス バーのアイコンを暗くできるため、完全に柔軟に対応することができるようになりました。
- 明るいテーマの場合、明るい status_bar_scrim と暗い nav_bar_scrim を用意します (ナビゲーション アイコンを暗くすることはできないので)。
- ダーク テーマの場合、values-night は status_bar_scrim をダークに上書きし、nav_bar_scrim は status_bar_scrim に従って同様にダークになります。
- また、私たちは Widget.AppTheme.AppBar が常に暗いテーマとなることを阻止する必要があります。
values-v23
v27+:
これで、ナビゲーション バーのアイコンを暗くできるため、完全に柔軟に対応することができるようになりました。
values-v23 では、ライト テーマで異なる status_bar_scrim および nav_bar_scrim を使用しているため、ナビゲーション バーのアイコンを暗くすることができます。nav_bar_scrim が status_bar_scrim に再び従うようにすれば完了です。
values-v27
全体のコードはここで見つけることができます。 https://github.com/gaurav414u/MoviesInsetsDemo