エッジ ツー エッジ表示により、アプリはシステムバー(ステータスバー、キャプション バー、ナビゲーション バー)の背後に 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
詳しくは、システムバーの保護についてをご覧ください。