エッジ ツー エッジを設定する

エッジ ツー エッジ表示を使用すると、アプリはシステムバー(ステータスバー、キャプションバー、ナビゲーション バー)の背後に UI を描画して、より没入感のあるユーザー エクスペリエンスを実現できます。Android 15(API レベル 35)以降を搭載したデバイスを対象とする場合、デフォルトでエッジツーエッジが適用されます。

すべての Android バージョンでコンテンツをエッジ ツー エッジで正しく表示するには、次の設定手順を行います。これらの手順を行わないと、アプリがシステムバーの背後に単色を描画したり、画面キーボード(IME)の遷移と同期してコンテンツをアニメーション化しなかったりする可能性があります。

1. エッジ ツー エッジ表示を有効にする

以前の Android バージョンでエッジ ツー エッジを有効にするには、Activity.onCreate() メソッドで enableEdgeToEdge() を呼び出します。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    enableEdgeToEdge()
    // ...
}

デフォルトでは、enableEdgeToEdge() はシステムバーを透明にします。ただし、3 ボタン ナビゲーション モードでは、コントラストを改善するためにナビゲーション バーに半透明のスクリムを適用します。システム アイコンとスクリムの色は、システムのライトモードまたはダークモードに適応します。

2. windowSoftInputMode を構成する

アクティビティの AndroidManifest.xml エントリに android:windowSoftInputMode="adjustResize" を設定します。この設定により、アプリは IME インセットを受け取ることができるため、画面キーボードが表示または非表示になったときに、パディングを使用してレイアウトを調整できます。

<!-- In your AndroidManifest.xml file: -->
<activity
  android:name=".ui.MainActivity"
  android:label="@string/app_name"
  android:windowSoftInputMode="adjustResize"
  android:theme="@style/Theme.MyApplication"
  android:exported="true">
  ...
</activity>

3. インセットを使用して重複を処理する

エッジ ツー エッジを有効にすると、アプリのコンテンツや UI 要素の一部がシステムバーの背後に描画されることがあります。重要な要素やインタラクティブ要素がシステムバーで隠れたり、システム ジェスチャーと重複したりしないようにするには、インセットを処理する必要があります。

インセットは、システム UI またはシステム ジェスチャーと交差する画面の部分を表します。エッジ ツー エッジ表示で考慮すべき主なインセットの種類は次のとおりです。

  • システムバー インセット: システムバーが表示される領域を表します。これらを使用して、UI がシステムバーで隠れないようにします。
  • ディスプレイ カットアウト インセット: デバイスの画面に物理的なカットアウト(カメラノッチなど)が存在する領域を表します。

Compose では、ルーラー、パディング修飾子、インセット サイズ修飾子のいずれかを使用してインセットを処理できます。詳細なガイダンスについては、ウィンドウ インセットについてをご覧ください。

高度なトピック

より高度なエッジ ツー エッジのユースケースについては、以下をご覧ください。

没入モード

動画や地図などの一部のコンテンツでは、システムバーが非表示になる没入型エクスペリエンスが効果的です。WindowInsetsControllerCompat を使用してシステムバーを非表示にできます。

val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView)

// Hide the system bars.
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())

// Show the system bars.
windowInsetsController.show(WindowInsetsCompat.Type.systemBars())

システムバーの色とアイコン

エッジ ツー エッジにすると、システムバーの背後にアプリの背景が表示されることがあるため、コントラストを改善するためにシステムバーのアイコンの色を調整する必要がある場合があります。

ステータスバーのアイコンをライトまたはダークに変更するには、WindowInsetsControllerCompat を使用します。

// Set status bar icons to dark.
WindowCompat.getInsetsController(window, window.decorView)
    .isAppearanceLightStatusBars = true

// Set status bar icons to light.
WindowCompat.getInsetsController(window, window.decorView)
    .isAppearanceLightStatusBars = false

システムバーの保護

enableEdgeToEdge() では、デフォルトで透明または半透明のシステムバーが提供されますが、これをカスタマイズする必要がある場合があります。透明なバーと半透明なバーのどちらを使用するかを決定するには、Android システムバーの設計ガイダンスとエッジ ツー エッジの設計ガイダンスをご覧ください。

3 ボタン ナビゲーション バーを半透明ではなく完全に透明にするには、コントラストの適用を無効にします。

window.isNavigationBarContrastEnforced = false

詳細については、システムバーの保護についてをご覧ください。