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 デバイス向けに予測型「戻る」ジェスチャーが導入されました。予測型「戻る」ジェスチャーは、数年にわたるリリースに含まれています。この機能を完全に実装すると、ユーザーは「戻る」ジェスチャーのデスティネーションやその他の結果を、完全に完了する前にプレビューして、現在のビューを続行するかそのままにするかを決定できます。
詳細については、予測型「戻る」ジェスチャーのサポートを追加するをご覧ください。
参考情報
ジェスチャー ナビゲーションについて詳しくは、以下をご覧ください。