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

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

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

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

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

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

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

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

システムバーのアイコン

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

エッジ ツー エッジに変更する際は、アプリの背景と対照的な色になるように、システムバーのアイコンの色を手動で更新しなければならない場合があります。たとえば、明るいステータスバー アイコンを作成するには:

Kotlin

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

Java

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