
Android 13(API レベル 33)では、スマートフォン、大画面、折りたたみ式デバイスなどの Android デバイス向けに予測型「戻る」ジェスチャーが導入されました。これは複数年にわたるリリースの一部です。この機能が完全に実装されると、ユーザーは「戻る」ジェスチャーによる移動先やその他の結果を完了前にプレビューできるため、現在のビューで操作を続行するかそのまま留まるかを決定できるようになります。
たとえば図 1 のモックアップに示すように、「戻る」ジェスチャーによって、アプリの背後にあるホーム画面のアニメーション プレビューを表示できます。Android 13 以降では、開発者向けオプションを有効にすると、このホームに戻るアニメーションをテストできます(このページの説明を参照)。
予測型「戻る」ジェスチャーをサポートするには、下位互換性がある OnBackPressedCallback
AppCompat 1.6.0-alpha05(AndroidX)以上の API、または新しい OnBackInvokedCallback
プラットフォーム API を使用して、アプリを更新する必要があります。ほとんどのアプリでは、下位互換性のある AndroidX API を使用します。
この更新は、「戻る」ナビゲーションを正しくインターセプトするための移行パスを提供するもので、KeyEvent.KEYCODE_BACK
からの「戻る」インターセプトや、onBackPressed
メソッドを含むクラス(Activity
、Dialog
など)を、新しいシステムの「戻る」API で置き換えるためのものです。
Codelab と Google I/O の動画
ドキュメントのこのページの内容に加えて、Codelab もお試しください。AndroidX のアクティビティ API を使用して予測型「戻る」ジェスチャーを処理する WebView の一般的なユースケース実装を参照できます。
AndroidX とプラットフォームの API を実装する例については、Google I/O の動画もご覧ください。
デフォルトの「戻る」ナビゲーションを使用するアプリを更新する
この機能をサポートするようにアプリを更新することは、アプリにカスタムの「戻る」動作が実装されていなければ簡単です(「戻る」動作はシステムで処理されます)。このページの説明に沿って、この機能を有効にするだけです。
アプリでフラグメントや Navigation コンポーネントを使用している場合は、AndroidX Activity 1.6.0-alpha05 以降へのアップグレードも行ってください。
カスタムの「戻る」ナビゲーションを使用するアプリを更新する
アプリにカスタム「戻る」動作が実装されている場合は、AndroidX 使用の有無や「戻る」ナビゲーションの処理方法に応じて移行パスが異なります。
アプリで AndroidX を使用している | アプリでの「戻る」ナビゲーションの処理方法 | おすすめの移行パス(このページのリンク) |
〇 | AndroidX API | AndroidX の既存の「戻る」動作を移行する |
サポートされていないプラットフォーム API | サポート対象外の「戻る」ナビゲーション API を含む AndroidX アプリを AndroidX API に移行する | |
× | サポートされていないプラットフォーム API(移行可能) | サポート対象外の「戻る」ナビゲーション API を使用するアプリをプラットフォーム API に移行する |
サポートされていないプラットフォーム API(移行不可) | 必須機能になるまでオプトインを延期する |
AndroidX の「戻る」ナビゲーションの実装を移行する
このユースケースが最も一般的なおすすめの方法です。これは、OnBackPressedDispatcher
によってカスタム ジェスチャー ナビゲーションを処理する、新規と既存両方のアプリに当てはまります(適切な「戻る」ナビゲーションを提供するを参照)。
アプリがこのケースにあてはまる場合は、次の手順に沿って、予測型「戻る」ジェスチャーのサポートを追加してください。
すでに
OnBackPressedDispatcher
API を使用している API(フラグメントや Navigation コンポーネントなど)が、予測型「戻る」ジェスチャーとシームレスに連携するように、AndroidX Activity 1.6.0-alpha05 にアップグレードします。// In your build.gradle file: dependencies { // Add this in addition to your other dependencies implementation "androidx.activity:activity:1.6.0-alpha05"
このページの説明に従って、予測型「戻る」ジェスチャーを有効にします。
サポート対象外の「戻る」ナビゲーション API を含む AndroidX アプリを AndroidX API に移行する
アプリで AndroidX ライブラリを使用しながら、サポートされていない「戻る」ナビゲーション API を実装または参照している場合は、AndroidX API に移行して新しい動作をサポートする必要があります。
サポートされていない API を AndroidX API に移行するには、次の操作を行います。
OnBackPressedCallback
の実装を使用して、システムの「戻る」ナビゲーション処理ロジックを AndroidX のOnBackPressedDispatcher
に移行します。詳細なガイダンスについては、適切な「戻る」ナビゲーションを提供するをご覧ください。「戻る」ジェスチャーのインターセプトを停止する準備ができたら、
OnBackPressedCallback
を無効にします。OnBackPressed
またはKeyEvent.KEYCODE_BACK
による「戻る」イベントのインターセプトを停止します。必ず AndroidX Activity 1.6.0-alpha05 にアップグレードしてください。
// In your build.gradle file: dependencies { // Add this in addition to your other dependencies implementation "androidx.activity:activity:1.6.0-alpha05"
アプリを正常に移行したら、このページで説明しているように、予測型「戻る」ジェスチャーをオプトインして、ホームに戻るシステム アニメーションが表示されるようにします。
サポート対象外の「戻る」ナビゲーション API を使用するアプリをプラットフォーム API に移行する
アプリで AndroidX ライブラリを使用できず、サポートされていない API を使用してカスタム「戻る」ナビゲーションを実装または参照している場合は、OnBackInvokedCallback
プラットフォーム API に移行する必要があります。
サポートされていない API をプラットフォーム API に移行するには、次の手順を行います。
Android 13 以上を搭載したデバイスでは新しい
OnBackInvokedCallback
API を使用し、Android 12 以下を搭載したデバイスではサポートされていない API を使用します。OnBackInvokedCallback
のカスタム「戻る」ロジックをonBackInvokedDispatcher
に登録します。それによって現在のアクティビティが終了しなくなり、ユーザーがシステムの「戻る」ナビゲーションを完了した時点で、コールバックが「戻る」アクションに反応できるようになります。「戻る」ジェスチャーのインターセプトを停止する準備ができたら、
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/window/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) */ } ); } }
Android 13 以上では、
OnBackPressed
またはKeyEvent.KEYCODE_BACK
による「戻る」イベントのインターセプトを停止します。アプリを正常に移行したら、このページで説明しているように、予測型「戻る」ジェスチャーをオプトインして、
OnBackInvokedCallback
が有効になるようにします。
予測型「戻る」ジェスチャーをオプトインする
実際のケースに基づいてアプリを更新する方法を決定したら、予測型「戻る」ジェスチャーのサポートを簡単にオプトインできます。
オプトインするには、AndroidManifest.xml
の <application>
タグ内で、android:enableOnBackInvokedCallback
フラグを true
に設定します。
<application
...
android:enableOnBackInvokedCallback="true"
... >
...
</application>
値を指定しない場合は、デフォルトで false
に設定され、以下の処理が行われます。
- 予測型「戻る」ジェスチャーのシステム アニメーションが無効なります。
OnBackInvokedCallback
は無視されますが、OnBackPressedCallback
呼び出しは引き続き機能します。
予測型「戻る」ジェスチャーのアニメーションをテストする
Android 13 の最終リリース以降では、開発者向けオプションを有効にして、図 1 のようなホームに戻るアニメーションをテストできるようになります。
このアニメーションをテストするには、次の手順を行います。
デバイスで、[設定] > [システム] > [開発者向けオプション] に移動します。
[予測型「戻る」アニメーション] を選択します。
更新したアプリを起動し、「戻る」ジェスチャーを使用して実際の動作を確認します。