エッジ ツー エッジのアプリは、システムバーの下に UI を描画することで、画面全体を活用します。
まとめ
- エッジ ツー エッジ エクスペリエンスを実現するため、システムバーの下に背景とスクロール コンテンツを描画します。
- タップ ジェスチャーやドラッグ ターゲットをシステム インセットの下に追加することは避けてください。これらはエッジ ツー エッジやジェスチャー ナビゲーションと競合します。
コンテンツをシステムバーの背後に描画する
エッジ ツー エッジ機能を使用すると、没入感のあるエクスペリエンスを実現するために、システムバーの下に UI を描画できます。
アプリは、インセットに対応することで、コンテンツの重複に対処できます。インセットは、システムバーや、ディスプレイ カットアウトなどの実機機能との重複を避けるために、アプリのコンテンツにどの程度のパディングが必要かを記述します。Compose と Views でエッジ ツー エッジをサポートし、インセットを処理する方法について確認する。
エッジ ツー エッジのユースケースを設計する際は、次のタイプのインセットに注意してください。
- システムバー インセットは、タップ可能で、システムバーによって視覚的に隠されないようにする必要がある UI に適用されます。
- システム ジェスチャー インセットは、アプリよりも優先される OS で使用されるジェスチャー ナビゲーション領域に適用されます。
- ディスプレイ カットアウト インセットは、カメラ カットアウトなど、ディスプレイ表面に拡張されるデバイス領域に適用されます。
ステータスバーに関する考慮事項
基本的なシステムバーの設計ガイダンスについては、Android システムバーをご覧ください。次のセクションでは、ステータスバーに関するその他の考慮事項について説明します。
コンテンツをスクロールする
トップ アプリバーはスクロール中に折りたたまれる必要があります。Material 3 の TopAppBar を折りたたむ方法について説明します。マテリアル 3 では、小さい上部アプリバーはステータスバーの高さまで折りたたむか、画面外にスクロールできます。中サイズと大サイズのトップ アプリバーは、小さいアプリバーに折りたたむことができます。マテリアル ガイダンスをご覧ください。
すべきこと
すべきこと
ステータスバーは、UI が下にスクロールするときに半透明になり、ステータスバーのアイコンがごちゃごちゃして見えないようにする必要があります。これを行うには、まず LazyColumn または RecyclerView のドキュメントの手順を実装して、スクロール可能な UI をエッジ ツー エッジにします。次に、次のいずれかの操作を行って、システムバーが半透明であることを確認します。
- 該当する場合は、スクロール時にマテリアル 3 の TopAppBar の自動保護を利用します。
- カスタム グラデーション コンポーザブルを作成するか、View に GradientProtection を使用します。Compose でこれを行う方法について詳しくは、システムバーの保護をご覧ください。
アダプティブ レイアウトの場合、背景色が異なるペインに対して個別の保護があることを確認します。
禁止事項
すべきこと
同様に、ナビゲーション ドロワーもアプリの他の部分とは別に保護する必要があります。
ステータスバーの保護を重ねないでください(たとえば、Material 3 TopAppBar の組み込み保護とカスタム保護の両方を使用するなど)。
ナビゲーション バーに関する考慮事項
基本的なナビゲーション バーの設計ガイダンスについては、Android システムバーをご覧ください。次のセクションでは、ナビゲーション バーに関するその他の考慮事項について説明します。
コンテンツをスクロールする
下部アプリバーはスクロール中に折りたたまれる必要があります。
すべきこと
すべきこと
ディスプレイ カットアウト
ディスプレイ カットアウトは UI の外観に影響する可能性があります。アプリは、UI の重要な部分がディスプレイ カットアウトの下に描画されないように、ディスプレイ カットアウト インセットを処理する必要があります。
すべきこと
禁止事項
ただし、次の図に示すように、アプリバーの背景が単色の場合は、ディスプレイ カットアウトに描画されます。
水平カルーセルがディスプレイ カットアウト内に描画されるようにします。
Compose と View でディスプレイ カットアウトをサポートする方法について説明します。
その他のガイダンス
一般に、背景と区切り線も端から端まで描画する必要があります。一方、テキストやボタンなどのコンテンツは、システム UI やハードウェア要素を避けるためにインセットする必要があります。