
Android 13 では、スマートフォン、大画面デバイス、折りたたみ式デバイスなどの Android デバイス用に、予測型「戻る」ジェスチャーが導入されます。この機能が完全に実装されると、ユーザーは「戻る」ジェスチャーを最後まで行う前にその結果のプレビューを確認して、戻るか現在のビューのままにするかを決定できるようになります。
たとえば図 1 のモックアップに示すように、「戻る」ジェスチャーによって、アプリの背後にあるホーム画面のアニメーション プレビューを表示できます。Android 13 の最終リリース以降では、このページに記載されている方法で開発者向けオプションを有効にすると、ホームに戻るアニメーションをテストできます。
予測型「戻る」ジェスチャーをサポートするには、OnBackPressedCallback
AppCompat 1.6.0-alpha03(AndroidX)以上の API、または新しい OnBackInvokedCallback
プラットフォーム API を使用して、アプリを更新する必要があります。
この更新は、サポートが終了した「戻る」ナビゲーション API のための移行パスになります。これには、KeyEvent.KEYCODE_BACK
や、onBackPressed
メソッドを含むクラス(Activity
、Dialog
など)が該当します。
Codelab
このページの内容に加えて、Codelab もお試しください。Codelab では、WebView で AndroidX Activity APIs
を使用して予測型「戻る」ジェスチャーを処理する、一般的なユースケースを確認できます。
デフォルトの「戻る」ナビゲーションを使用するアプリを更新する
この機能をサポートするようにアプリを更新することは、アプリにカスタムの「戻る」動作が実装されていなければ簡単です(「戻る」動作はシステムで処理されます)。このページの説明に沿って、この機能を有効にするだけです。
カスタムの「戻る」ナビゲーションを使用するアプリを更新する
アプリにカスタム「戻る」動作が実装されている場合は、AndroidX 使用の有無や「戻る」ナビゲーションの処理方法に応じて移行パスが異なります。
アプリで AndroidX を使用している | アプリでの「戻る」ナビゲーションの処理方法 | おすすめの移行パス(このページのリンク) |
〇 | AndroidX API | AndroidX の既存の「戻る」動作を移行する |
サポートされていないプラットフォーム API | サポート対象外の「戻る」ナビゲーション API を含む AndroidX アプリを AndroidX API に移行する | |
× | サポートされていないプラットフォーム API(移行可能) | サポート対象外の「戻る」ナビゲーション API を使用するアプリをプラットフォーム API に移行する |
サポートされていないプラットフォーム API(移行不可) | 必須機能になるまでオプトインを延期する |
AndroidX の「戻る」ナビゲーションの実装を移行する
このユースケースが最も一般的なおすすめの方法です。これは、OnBackPressedDispatcher
によってカスタム ジェスチャー ナビゲーションを処理する、新規と既存両方のアプリに当てはまります(適切な「戻る」ナビゲーションを提供するを参照)。
アプリがこのカテゴリに該当する場合は、このページの説明に沿って予測型「戻る」ジェスチャーをオプトインすることで、予測型「戻る」ジェスチャーをサポートできます。
サポート対象外の「戻る」ナビゲーション API を含む AndroidX アプリを AndroidX API に移行する
アプリで AndroidX ライブラリを使用しながら、サポートされていない「戻る」ナビゲーション API を実装または参照している場合は、AndroidX API に移行して新しい動作をサポートする必要があります。
サポートされていない API を AndroidX API に移行するには、次の操作を行います。
OnBackPressedCallback
の実装を使用して、システムの「戻る」ナビゲーション処理ロジックを AndroidX のOnBackPressedDispatcher
に移行します。詳細なガイダンスについては、適切な「戻る」ナビゲーションを提供するをご覧ください。システムの「戻る」ナビゲーションのインターセプトを停止するには、以前に有効にした
OnBackPressedCallback
のインスタンスを無効にするか、どの時点のコールバックも有効にしないようにします。アプリを正常に移行したら、このページの説明に沿って、予測型「戻る」ジェスチャーをオプトインします。
サポート対象外の「戻る」ナビゲーション API を使用するアプリをプラットフォーム API に移行する
アプリで AndroidX ライブラリを使用できず、サポートされていない API を使用してカスタム「戻る」ナビゲーションを実装または参照している場合は、OnBackInvokedCallback
プラットフォーム API に移行する必要があります。
サポートされていない API をプラットフォーム API に移行するには、次の手順を行います。
Android 13 以上を搭載したデバイスでは新しい
OnBackInvokedCallback
API を使用し、Android 12 以下を搭載したデバイスではサポートされていない API を使用します。OnBackInvokedCallback
のカスタム「戻る」ロジックをonBackInvoked
メソッドのロジックに登録します。それによって現在のアクティビティが終了しなくなり、ユーザーがシステムの「戻る」ナビゲーションを完了した時点で、コールバックが「戻る」アクションに反応できるようになります。今後、システムの「戻る」ナビゲーションの機能強化が適切にサポートされるように、アプリでの
OnBackInvokedCallback
の登録を必ず解除してください。解除しないと、システムの「戻る」ナビゲーションの使用時に、ビュー間で動かなくなってユーザーがアプリを強制終了しなければならなくなるなど、望ましくない動作が発生することがあります。onBackPressed
からロジックを移行する方法の例を次に示します。Kotlin
@Override fun onCreate() { if (BuildCompat.isAtLeastT()) { onBackInvokedDispatcher.registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT ) { /** * onBackPressed logic goes here. For instance: * Prevents closing the app to go home screen when in the * middle of entering data to a form * or from accidentally leaving a fragment with a WebView in it * * Unregistering the callback to stop intercepting the back gesture: * When the user transitions to the topmost screen (activity, fragment) * in the BackStack, unregister the callback by using * OnBackInvokeDispatcher.unregisterOnBackInvokedCallback * (https://developer.android.com/reference/kotlin/android/view/OnBackInvokedDispatcher#unregisteronbackinvokedcallback) */ } } }
Java
@Override void onCreate() { if (BuildCompat.isAtLeastT()) { getOnBackInvokedDispatcher().registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT, () -> { /** * onBackPressed logic goes here - For instance: * Prevents closing the app to go home screen when in the * middle of entering data to a form * or from accidentally leaving a fragment with a WebView in it * * Unregistering the callback to stop intercepting the back gesture: * When the user transitions to the topmost screen (activity, fragment) * in the BackStack, unregister the callback by using * OnBackInvokeDispatcher.unregisterOnBackInvokedCallback * (https://developer.android.com/reference/kotlin/android/view/OnBackInvokedDispatcher#unregisteronbackinvokedcallback) */ } ); } }
アプリを正常に移行したら、次のセクションの説明に沿って、予測型「戻る」ジェスチャーをオプトインします。
予測型「戻る」ジェスチャーをオプトインする
実際のケースに基づいてアプリを更新する方法を決定したら、予測型「戻る」ジェスチャーのサポートを簡単にオプトインできます。
オプトインするには、AndroidManifest.xml
の <application>
タグ内で、android:enableOnBackInvokedCallback
フラグを true
に設定します。
<application
...
android:enableOnBackInvokedCallback="true"
... >
...
</application>
値を指定しない場合は、デフォルトで false
に設定され、予測型「戻る」ジェスチャーが無効になります。
予測型「戻る」ジェスチャーのアニメーションをテストする
Android 13 の最終リリース以降では、開発者向けオプションを有効にして、図 1 のようなホームに戻るアニメーションをテストできるようになります。
このアニメーションをテストするには、次の手順を行います。
デバイスで、[設定] > [システム] > [開発者向けオプション] に移動します。
[予測型「戻る」アニメーション] を選択します。
更新したアプリを起動し、「戻る」ジェスチャーを使用して実際の動作を確認します。