ステータスバーやナビゲーション バーなどのシステム UI の描画は、Android プラットフォームが担当します。このシステム 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 つの「安全な」インセット タイプにまとめられます。
これらの「安全な」インセット タイプは、基盤となるプラットフォームのインセットに基づいて、さまざまな方法でコンテンツを保護します。
- システム UI の下に描画されないコンテンツを保護するには、
WindowInsets.safeDrawing
を使用します。これは、システム UI によって隠れているコンテンツ(部分的または完全に)を描画しないようにするための、インセットの最も一般的な用途です。 WindowInsets.safeGestures
を使用して、ジェスチャーでコンテンツを保護します。これにより、システム ジェスチャーがアプリのジェスチャー(ボトムシート、カルーセル、ゲームなど)と競合するのを防ぐことができます。WindowInsets.safeDrawing
とWindowInsets.safeGestures
の組み合わせとしてWindowInsets.safeContent
を使用して、コンテンツの視覚的な重複やジェスチャーの重複がないようにします。
あなたへのおすすめ
- 注: JavaScript がオフになっている場合はリンクテキストが表示されます
- マテリアル コンポーネントとレイアウト
CoordinatorLayout
を Compose に移行する- その他の考慮事項