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

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

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

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

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

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

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

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

システムバー アイコン

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

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

Kotlin

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

Java

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