エッジ ツー エッジ表示を使用すると、アプリはシステムバー(ステータスバー、キャプションバー、ナビゲーション バー)の背後に UI を描画して、より没入感のあるユーザー エクスペリエンスを実現できます。Android 15(API レベル 35)以降を搭載したデバイスを対象とする場合、デフォルトでエッジツーエッジが適用されます。
すべての Android バージョンでコンテンツをエッジ ツー エッジで正しく表示するには、次の設定手順を行います。これらの手順を行わないと、アプリがシステムバーの背後に単色を描画したり、画面キーボード(IME)の遷移と同期してコンテンツをアニメーション化しなかったりする可能性があります。
Android のスキル
GitHub で表示Edge-to-Edge のサポートを追加する
android skills add edge-to-edge1. エッジ ツー エッジ表示を有効にする
以前の 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
詳細については、システムバーの保護についてをご覧ください。