Android 10(API レベル 29)以降、Android システムは完全なジェスチャー ベースのナビゲーションをサポートしています。アプリ デベロッパーは、アプリがこの機能に対応していることを確認するために、次の 2 つのことを行う必要があります。
- アプリのコンテンツを画面全体に拡大する(エッジ ツー エッジへの対応)。
- 競合するアプリ ジェスチャーに対処する。
また、Android 13(API レベル 33)では、スマートフォン、大画面、折りたたみ式デバイスなどの Android デバイス向けに予測型「戻る」ジェスチャーが導入されました。これは、複数年にわたるリリースの対象です。アプリ デベロッパーは、アプリが予測型「戻る」ジェスチャーをサポートするように、手順に沿って対応できます。
エッジ ツー エッジのアプリ コンテンツを提供する
フローティング ナビゲーション バーによって利用可能になった追加の画面スペースを活用するには、アプリで特定の変更を構成する必要があります。
詳しくは、アプリでコンテンツをエッジ ツー エッジで表示するをご覧ください。
競合するアプリのジェスチャーを処理する
ジェスチャー ナビゲーション モデルは、アプリ デベロッパーが以前に使用していたジェスチャーと競合する可能性があります。そのため、アプリのユーザー インターフェースの調整が必要になる場合があります。
「戻る」ジェスチャーとの競合
「戻る」の新しいシステム ジェスチャーは、画面の左端または右端から内側へのスワイプです。これにより、これらの領域のアプリ ナビゲーション要素が妨げられる可能性があります。画面の左端と右端の要素の機能を維持するには、タッチ入力を受け取る必要がある領域をシステムに指定して、「戻る」ジェスチャーを個別に無効にします。これを行うには、Android 10 で導入された View.setSystemGestureExclusionRects() API に List<Rect> を渡します。このメソッドは、androidx.core:core:1.1.0-dev01 の時点で ViewCompat でも使用できます。
次に例を示します。
Kotlin
var exclusionRects = listOf(rect1, rect2, rect3) fun onLayout( changedCanvas: Boolean, left: Int, top: Int, right: Int, bottom: Int) { // Update rect bounds and the exclusionRects list setSystemGestureExclusionRects(exclusionRects) } fun onDraw(canvas: Canvas) { // Update rect bounds and the exclusionRects list setSystemGestureExclusionRects(exclusionRects) }
Java
List<Rect> exclusionRects; public void onLayout( boolean changedCanvas, int left, int top, int right, int bottom) { // Update rect bounds and the exclusionRects list setSystemGestureExclusionRects(exclusionRects); } public void onDraw(Canvas canvas) { // Update rect bounds and the exclusionRects list setSystemGestureExclusionRects(exclusionRects); }
ホーム操作またはクイック切り替え操作との競合
ホームとクイック切り替えの新しいシステム ジェスチャーでは、以前はナビゲーション バーがあった画面下部のスペースをスワイプします。アプリは、「戻る」ジェスチャーの場合のように、これらのジェスチャーをオプトアウトすることはできません。
この問題を軽減するため、Android 10 では、タッチ認識のしきい値をアプリに通知する WindowInsets.getMandatorySystemGestureInsets() API が導入されています。
ビュー階層のないゲームやアプリ
ビュー階層のないゲームやその他のアプリでは、多くの場合、ユーザーがシステム ジェスチャー領域の近くをスワイプする必要があります。そのような場合、ゲームは Window.setSystemGestureExclusionRects() を使用して、システム ジェスチャー用に予約されている領域と重複する領域を除外できます。ゲームでは、ゲームプレイ中など、必要な場合にのみこれらの領域を除外する必要があります。
ゲームでホーム ジェスチャー領域の近くをスワイプする必要がある場合、アプリは没入モードでレイアウトされるようにリクエストできます。これにより、ユーザーがゲームを操作している間はシステム ジェスチャーが無効になりますが、ユーザーは画面の下部からスワイプすることでシステム ジェスチャーを再度有効にできます。
予測型「戻る」ジェスチャーをサポートするようにアプリを更新する
Android 13(API レベル 33)では、スマートフォン、大画面、折りたたみ式デバイスなどの Android デバイス向けに予測型「戻る」ジェスチャーが導入されました。予測型「戻る」ジェスチャーは、複数年にわたるリリースの対象です。この機能が完全に実装されると、ユーザーは「戻る」ジェスチャーを最後まで行う前にその結果のプレビューを確認して、戻るか現在のビューのままにするかを決定できるようになります。
詳しくは、予測型「戻る」ジェスチャーのサポートを追加するをご覧ください。
参考情報
ジェスチャー ナビゲーションについて詳しくは、以下をご覧ください。