アプリでエッジ ツー エッジ表示を有効にするには、enableEdgeToEdge
を呼び出します。ほとんどのアプリでは、この対応で十分です。このガイドでは、アプリで enableEdgeToEdge
を使用せずにエッジツーエッジを有効にする方法について説明します。
アプリを全画面表示で配置する
次のコード例に示すように、WindowCompat.setDecorFitsSystemWindows(window,
false)
を使用して、システムバーの背後にアプリをレイアウトします。
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) WindowCompat.setDecorFitsSystemWindows(window, false) }
Java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WindowCompat.setDecorFitsSystemWindows(getWindow(), false); }
システムバーの色を変更する
画面全体のレイアウトで動作する場合、アプリは、下にあるコンテンツを表示できるようにシステムバーの色を変更する必要があります。アプリがこのステップを実行すると、ジェスチャー ナビゲーション モードとボタン モードで、ユーザー インターフェースの視覚的保護がすべてシステムによって処理されます。
- ジェスチャー ナビゲーション モード: システムはダイナミック カラー適応を適用します。このモードでは、システムバーのコンテンツは、背後にあるコンテンツに基づいて色が変化します。次の例では、ナビゲーション バーのハンドルは、明るいコンテンツの上に表示されている場合は暗い色に、暗いコンテンツの上に表示されている場合は明るい色に変わります。
- ボタンモード: システムバーの背後に半透明のスクリーン(API レベル 29 以降の場合)または透明なシステムバー(API レベル 28 以前の場合)が適用されます。
- ステータスバーのコンテンツの色: 時間やアイコンなどのステータスバーのコンテンツの色を制御します。
themes.xml
ファイルを編集して、ナビゲーション バーの色を設定できます。必要に応じて、ステータスバーを透明に設定し、ステータスバーのコンテンツの色を暗くすることもできます。
<!-- values-v29/themes.xml -->
<style name="Theme.MyApp">
<item name="android:navigationBarColor">
@android:color/transparent
</item>
<!-- Optional: set to transparent if your app is drawing behind the status bar. -->
<item name="android:statusBarColor">
@android:color/transparent
</item>
<!-- Optional: set for a light status bar with dark content. -->
<item name="android:windowLightStatusBar">
true
</item>
</style>
WindowInsetsController
API を直接使用することもできますが、可能な場合はサポート ライブラリ WindowInsetsControllerCompat
を使用することを強くおすすめします。ステータスバーのコンテンツの色を制御するには、theme.xml
ではなく WindowInsetsControllerCompat
API を使用できます。そのためには、setAppearanceLightNavigationBars()
関数を使用して、true
を渡してナビゲーションの前景色を明るい色に変更するか、false
を渡してデフォルトの色に戻します。
Kotlin
val windowInsetsController = ViewCompat.getWindowInsetsController(window.decorView) windowInsetsController?.isAppearanceLightNavigationBars = true
Java
WindowInsetsControllerCompat windowInsetsController = ViewCompat.getWindowInsetsController(getWindow().getDecorView()); if (windowInsetsController == null) { return; } windowInsetsController.setAppearanceLightNavigationBars(true);