ビューと Compose でインセットを使用する

アプリに Compose コードと View コードの両方が含まれている場合は、それぞれが使用するシステム インセットを明示的に指定し、インセットが兄弟ビューにディスパッチされるようにする必要があります。

デフォルトのインセットをオーバーライドする

画面の同じ階層に View と Compose のコードがある場合は、デフォルトのインセットをオーバーライドする必要があるかもしれません。この場合、どちらがインセットを使用し、どちらがインセットを無視するかを明示する必要があります。

たとえば、最も外側のレイアウトが Android View レイアウトの場合、View システムでインセットを消費し、Compose では無視する必要があります。または、最も外側のレイアウトがコンポーザブルの場合は、Compose でインセットを消費し、それに応じて AndroidView コンポーザブルをパディングする必要があります。

デフォルトでは、各 ComposeView は WindowInsetsCompat レベルの消費ですべてのインセットを消費します。このデフォルトの動作を変更するには、AbstractComposeView.consumeWindowInsets を false に設定します。

ビューの下位互換性のあるインセット ディスパッチ

アプリにビューコードが含まれている場合は、Android 10(API レベル 29)以前を搭載したデバイスで、インセットが兄弟ビューにディスパッチされていることを確認する必要があります。詳しくは、エッジ ツー エッジのビューガイドをご覧ください。

システムバー アイコン

enableEdgeToEdge を呼び出すと、デバイスのテーマが変更されたときにシステムバーのアイコンの色が更新されます。

エッジ ツー エッジにする場合、システムバーのアイコンの色を手動で更新して、アプリの背景とコントラストを付ける必要がある場合があります。たとえば、明るいステータスバー アイコンを作成するには、次のようにします。

Kotlin

WindowCompat.getInsetsController(window, window.decorView)
    .isAppearanceLightStatusBars = false

Java

WindowCompat.getInsetsController(window, window.getDecorView())
    .setAppearanceLightStatusBars(false);