狭額縁ディスプレイを手動でセットアップする

enableEdgeToEdge を呼び出すと、真に下位互換性を保つために必要なロジックがカプセル化されるため、エッジ ツー エッジ ディスプレイを設定する際は、この方法をおすすめします。enableEdgeToEdge を使用してエッジ ツー エッジを実現する最新の方法については、このガイドではなく、ComposeViews のドキュメントを参照してください。

推奨はされませんが、アプリでエッジ ツー エッジのディスプレイを手動で設定する必要がある場合は、次の手順を行います。

  1. WindowCompat.setDecorFitsSystemWindows(window, false) を呼び出します。
  2. システムバーを透明に設定します。
  3. インセットを処理します。

アプリを全画面表示でレイアウトする

次のコード例に示すように、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);
}

システムバーの色を変更する

Android 14 以前でエッジ ツー エッジ レイアウトを手動で作成する場合、アプリでシステムバーを透明にする必要もあります。

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>

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);

インセットを処理する

最後に、重要な UI がシステムバーやディスプレイ カットアウトを避けるように、アプリでインセットを処理する必要があります。インセットの処理方法については、ComposeViews のドキュメントをご覧ください。