enableEdgeToEdge
を呼び出すことで、アプリでエッジ ツー エッジ表示を有効にできます。ほとんどのアプリでは、この対応で十分です。このガイドでは、enableEdgeToEdge
を使用せずにアプリでエッジ ツー エッジを有効にする必要がある場合の手順について説明します。
アプリを全画面表示でレイアウトする
次のコード例に示すように、WindowCompat.setDecorFitsSystemWindows(window,
false)
を使用して、システムバーの背後にアプリをレイアウトします。
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) WindowCompat.setDecorFitsSystemWindows(window, false) }
Java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WindowCompat.setDecorFitsSystemWindows(getWindow(), false); }
システムバーの色を変更する
画面全体にレイアウトする場合、アプリはシステムバーの色を変更して、その下にあるコンテンツを表示できるようにする必要があります。アプリがこの手順を実行すると、ジェスチャー ナビゲーション モードとボタンモードの両方で、ユーザー インターフェースの視覚的保護はすべてシステムが処理します。
- ジェスチャー ナビゲーション モード: システムバーの要素が背後にあるコンテンツに応じて色が変化する、ダイナミック カラー適応が適用されます。次の例では、ナビゲーション バーのハンドルは、明るいコンテンツの背後にあるときは暗い色に、暗いコンテンツの背後にあるときは明るい色に変わります。
- ボタンモード: システムバーの背後に半透明のスクリム(API レベル 29 以降の場合)または透明なシステムバー(API レベル 28 以前の場合)が適用されます。

- ステータスバーのコンテンツの色: 時間やアイコンなど、ステータスバーのコンテンツの色を制御します。

themes.xml
ファイルを編集して、ナビゲーション バーの色を設定できます。また、必要に応じて、ステータスバーを透明に設定し、ステータスバーのコンテンツの色を暗く設定することもできます。
<!-- values-v29/themes.xml -->
<style name="Theme.MyApp">
<item name="android:navigationBarColor">
@android:color/transparent
</item>
<!-- Optional: set to transparent if your app is drawing behind the status bar. -->
<item name="android:statusBarColor">
@android:color/transparent
</item>
<!-- Optional: set for a light status bar with dark content. -->
<item name="android:windowLightStatusBar">
true
</item>
</style>
WindowInsetsController
API を直接使用することもできますが、可能な場合はサポート ライブラリの WindowInsetsControllerCompat
を使用することを強くおすすめします。theme.xml
の代わりに WindowInsetsControllerCompat
API を使用して、ステータスバーのコンテンツの色を制御できます。そのためには、setAppearanceLightNavigationBars()
関数を使用し、true
を渡してナビゲーションの前景色を明るい色に変更するか、false
を渡してデフォルトの色に戻します。
Kotlin
val windowInsetsController = ViewCompat.getWindowInsetsController(window.decorView) windowInsetsController?.isAppearanceLightNavigationBars = true
Java
WindowInsetsControllerCompat windowInsetsController = ViewCompat.getWindowInsetsController(getWindow().getDecorView()); if (windowInsetsController == null) { return; } windowInsetsController.setAppearanceLightNavigationBars(true);