Android プラットフォームは、ステータスバーやナビゲーション バーなどのシステム UI の描画を担当します。このシステム UI は、ユーザーが使用しているアプリに関係なく表示されます。
WindowInsets は、アプリが正しい領域に描画され、UI がシステム UI で隠されないように、システム UI に関する情報を提供します。
Android 14(API レベル 34)以前では、アプリの UI はデフォルトでシステムバーやディスプレイ カットアウトの下に描画されません。
Android 15(API レベル 35)以降では、アプリが SDK 35 をターゲットにすると、システムバーとディスプレイ カットアウトの下にアプリが描画されます。これにより、ユーザー エクスペリエンスがよりシームレスになり、アプリは利用可能なウィンドウ スペースを最大限に活用できます。
システム UI の背後にコンテンツを表示することを、エッジ ツー エッジと呼びます。このページでは、さまざまなタイプのインセット、エッジ ツー エッジにする方法、インセット API を使用して UI をアニメーション化し、アプリのコンテンツがシステム UI 要素で隠れないようにする方法について説明します。
インセットの基本
アプリをエッジ ツー エッジに移行する場合は、重要なコンテンツやインタラクションがシステム UI で隠れないようにする必要があります。たとえば、ボタンがナビゲーション バーの背後に配置されている場合、ユーザーはボタンをクリックできない可能性があります。
システム UI のサイズと配置場所に関する情報は、インセットを使用して指定します。
システム UI の各部分には、そのサイズと配置場所を記述する対応するタイプのインセットがあります。たとえば、ステータスバーのインセットはステータスバーのサイズと位置を提供し、ナビゲーション バーのインセットはナビゲーション バーのサイズと位置を提供します。各タイプのインセットは、上、左、右、下の 4 つのピクセル寸法で構成されます。これらのディメンションは、システム UI がアプリのウィンドウの対応する辺からどれだけ離れているかを指定します。したがって、そのようなシステム UI との重複を避けるには、アプリ UI をその量だけインセットする必要があります。
これらの組み込みの Android インセット タイプは、WindowInsets を介して利用できます。
ステータスバーを記述するインセット。通知アイコンやその他のインジケーターを含む、上部のシステム UI バーです。 |
|
表示されている場合のステータスバーのインセット。ステータスバーが非表示になっている場合(没入型全画面モードに入ったため)、メインのステータスバーのインセットは空になりますが、これらのインセットは空になりません。 |
|
ナビゲーション バーを記述するインセット。これらは、デバイスの左側、右側、下部にあるシステム UI バーで、タスクバーまたはナビゲーション アイコンを示します。これらは、ユーザーが好むナビゲーション方法とタスクバーの操作に基づいて、実行時に変更される可能性があります。 |
|
表示されている場合のナビゲーション バーのインセット。ナビゲーション バーが非表示になっている場合(没入型全画面モードに入ったため)、メインのナビゲーション バーのインセットは空になりますが、これらのインセットは空になりません。 |
|
フリーフォーム ウィンドウ(上部のタイトルバーなど)の場合に、システム UI ウィンドウの装飾を記述するインセット。 |
|
表示されている場合のキャプション バーのインセット。キャプション バーが非表示の場合、メインのキャプション バーのインセットは空になりますが、これらのインセットは空になりません。 |
|
システムバーのインセット(ステータスバー、ナビゲーション バー、キャプション バーなど)の結合。 |
|
システムバーが表示されている場合のシステムバーのインセット。システムバーが非表示になっている場合(没入型全画面モードに入ったため)、メインのシステムバーのインセットは空になりますが、これらのインセットは空になりません。 |
|
ソフトウェア キーボードが占有する下部のスペースの量を表すインセット。 |
|
現在のキーボード アニメーションの前にソフトウェア キーボードが占有していたスペースの量を表すインセット。 |
|
現在のキーボード アニメーションの後にソフトウェア キーボードが占有するスペースの量を示すインセット。 |
|
ナビゲーション UI に関する詳細情報を示すインセットのタイプ。アプリではなくシステムによって「タップ」が処理されるスペースの量を示します。ジェスチャー ナビゲーションを備えた透明なナビゲーション バーの場合、一部のアプリ要素はシステム ナビゲーション UI を介してタップできます。 |
|
タップ可能な要素のインセット(表示されている場合)。タップ可能な要素が非表示になっている場合(没入型全画面モードに入ったため)、メインのタップ可能な要素のインセットは空になりますが、これらのインセットは空になりません。 |
|
システムがナビゲーションのジェスチャーをインターセプトするインセットの量を表すインセット。アプリは、 |
|
システム ジェスチャーのサブセット。常にシステムによって処理され、 |
|
ディスプレイ カットアウト(ノッチまたはピンホール)との重なりを避けるために必要なスペースの量を表すインセット。 |
|
ウォーターフォール ディスプレイの湾曲部分を表すインセット。ウォーターフォール ディスプレイには、画面の端に沿って湾曲した領域があり、画面がデバイスの側面に沿って回り込んでいます。 |
これらのタイプは、コンテンツが隠れないようにする 3 つの「安全な」インセット タイプにまとめられています。
これらの「安全な」インセット タイプは、基盤となるプラットフォーム インセットに基づいて、さまざまな方法でコンテンツを保護します。
WindowInsets.safeDrawingを使用して、システム UI の下に描画すべきでないコンテンツを保護します。これは、インセットの最も一般的な用途です。つまり、システム UI によって(部分的または完全に)隠されるコンテンツの描画を防ぐために使用されます。WindowInsets.safeGesturesを使用して、ジェスチャーでコンテンツを保護します。これにより、システム ジェスチャーがアプリのジェスチャー(ボトムシート、カルーセル、ゲームなど)と競合するのを回避できます。WindowInsets.safeContentをWindowInsets.safeDrawingとWindowInsets.safeGesturesの組み合わせとして使用し、コンテンツが視覚的に重複せず、ジェスチャーが重複しないようにします。
あなたへのおすすめ
- 注: JavaScript がオフになっている場合はリンクテキストが表示されます
- マテリアル コンポーネントとレイアウト
CoordinatorLayoutを Compose に移行する- その他の考慮事項