Menambahkan dukungan untuk gestur kembali prediktif

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.
Gambar 1: Contoh tampilan dan nuansa gestur kembali prediktif di ponsel

Android 13 (API level 33) memperkenalkan gestur kembali prediktif untuk perangkat Android seperti ponsel, perangkat layar besar, dan perangkat foldable. Ini adalah bagian dari rilis selama beberapa tahun; saat sepenuhnya diterapkan, fitur ini akan memungkinkan pengguna melihat pratinjau tujuan atau hasil gestur kembali lainnya sebelum menyelesaikan sepenuhnya, sehingga memungkinkan mereka memutuskan apakah akan melanjutkan atau tetap dalam tampilan saat ini.

Misalnya, menggunakan gestur kembali dapat menampilkan pratinjau animasi Layar utama di belakang aplikasi, seperti yang ditampilkan dalam mockup pada gambar 1. Mulai Android 13, Anda dapat menguji animasi "kembali ke layar utama" ini dengan mengaktifkan opsi developer (seperti yang dijelaskan di halaman ini).

Agar dapat mendukung gestur kembali prediktif, Anda harus mengupdate aplikasi menggunakan OnBackPressedCallback AppCompat 1.6.0-alpha05 (AndroidX) atau API yang lebih tinggi, atau menggunakan versi baru API platform OnBackInvokedCallback.

Update ini menyediakan jalur migrasi untuk menangkap navigasi kembali dengan benar, yang melibatkan penggantian intersepsi kembali dari KeyEvent.KEYCODE_BACK dan class apa pun dengan metode onBackPressed seperti Activity dan Dialog dengan Back API sistem yang baru.

Codelab dan video Google I/O

Selain menggunakan dokumentasi di halaman ini, coba codelab kami. Codelab ini menyediakan implementasi kasus penggunaan umum tentang WebView yang menangani gestur kembali prediktif menggunakan AndroidX Activity API.

Anda juga dapat melihat video Google I/O kami, yang mencakup contoh tambahan untuk mengimplementasikan AndroidX dan API platform.

Mengupdate aplikasi yang menggunakan navigasi kembali default

Mengupdate aplikasi untuk mendukung fitur ini dapat dilakukan dengan mudah jika aplikasi Anda tidak menerapkan perilaku kembali khusus (dengan kata lain, aplikasi akan menyerahkan penanganan kembali kepada sistem). Cukup pilih untuk menggunakan fitur ini seperti yang dijelaskan di halaman ini.

Jika aplikasi Anda menggunakan Fragment atau Komponen Navigation, upgrade juga ke AndroidX Activity 1.6.0-alpha05 atau yang lebih tinggi.

Mengupdate aplikasi yang menggunakan navigasi kembali kustom

Jika aplikasi Anda menerapkan perilaku kembali kustom, ada jalur migrasi yang berbeda, bergantung pada apakah aplikasi tersebut menggunakan AndroidX dan caranya menangani navigasi kembali.

Aplikasi Anda menggunakan AndroidX Cara aplikasi Anda menangani navigasi kembali Jalur migrasi yang direkomendasikan (link di halaman ini)
Ya API AndroidX Memigrasikan implementasi kembali AndroidX yang ada
API platform yang tidak didukung Memigrasikan aplikasi AndroidX yang berisi API navigasi kembali yang tidak didukung ke API AndroidX
Tidak API platform yang tidak didukung, dapat dimigrasikan Memigrasikan aplikasi yang menggunakan API navigasi kembali yang tidak didukung ke API platform
API platform tidak didukung, tetapi tidak dapat dimigrasikan Tunda persetujuan hingga fitur ini diperlukan

Memigrasikan implementasi navigasi kembali AndroidX

Kasus penggunaan ini adalah yang paling umum (dan paling direkomendasikan). Ini berlaku untuk aplikasi baru atau yang sudah ada, yang menerapkan penanganan navigasi gestur khusus dengan OnBackPressedDispatcher, seperti yang dijelaskan dalam Menyediakan navigasi kembali khusus.

Jika aplikasi Anda sesuai dengan kategori ini, ikuti langkah-langkah berikut untuk menambahkan dukungan bagi gestur kembali prediktif:

  1. Untuk memastikan API yang sudah menggunakan API OnBackPressedDispatcher (seperti Fragment dan Komponen Navigation) berfungsi dengan lancar menggunakan gestur kembali prediktif, upgrade ke 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"
    
  2. Pilih untuk mendukung gestur kembali prediktif, seperti yang dijelaskan di halaman ini.

Memigrasikan aplikasi AndroidX yang berisi API navigasi kembali yang tidak didukung ke API AndroidX

Jika aplikasi Anda menggunakan library AndroidX, tetapi menerapkan atau membuat referensi ke API navigasi kembali yang tidak didukung, Anda harus bermigrasi untuk menggunakan API AndroidX untuk mendukung perilaku baru.

Untuk memigrasikan API yang tidak didukung ke API AndroidX:

  1. Migrasikan logika penanganan Kembali sistem Anda ke OnBackPressedDispatcher AndroidX dengan implementasi OnBackPressedCallback. Untuk panduan mendetail, lihat Menyediakan navigasi kembali khusus.

  2. Nonaktifkan OnBackPressedCallback saat siap menghentikan intersepsi gestur kembali.

  3. Berhenti menahan peristiwa kembali melalui OnBackPressed atau KeyEvent.KEYCODE_BACK.

  4. Pastikan untuk mengupgrade ke 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"
    
  5. Setelah berhasil memigrasikan aplikasi Anda, pilih untuk menggunakan gestur kembali prediktif seperti yang dijelaskan di halaman ini.

Memigrasikan aplikasi yang menggunakan API navigasi kembali yang tidak didukung ke API platform

Jika aplikasi Anda tidak dapat menggunakan library AndroidX dan sebagai gantinya mengimplementasikan atau membuat referensi ke navigasi Kembali kustom menggunakan API yang tidak didukung, Anda harus bermigrasi ke API platform OnBackInvokedCallback.

Selesaikan langkah-langkah berikut untuk memigrasikan API yang tidak didukung ke API platform:

  1. Gunakan OnBackInvokedCallback API baru di perangkat yang menjalankan Android 13 atau versi lebih baru, dan andalkan API yang tidak didukung di perangkat yang menjalankan Android 12 atau versi lebih lama.

  2. Daftarkan logika kembali kustom Anda di OnBackInvokedCallback dengan onBackInvokedDispatcher. Langkah ini akan mencegah aktivitas saat ini diselesaikan, dan callback Anda akan mendapat kesempatan untuk bereaksi terhadap tindakan Kembali setelah pengguna menyelesaikan navigasi Kembali sistem.

  3. Batalkan pendaftaran OnBackInvokedCallback saat siap menghentikan intersepsi gestur kembali. Jika tidak, pengguna mungkin akan melihat perilaku yang tidak diinginkan saat menggunakan navigasi Kembali sistem—misalnya, "terhenti" di antara tampilan dan memaksa mereka untuk menghentikan paksa aplikasi Anda.

    Berikut contoh cara memigrasikan logika dari 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)
               */
            }
        );
      }
    }
    
  4. Berhenti mengintersep peristiwa kembali melalui OnBackPressed atau KeyEvent.KEYCODE_BACK untuk Android 13 dan versi lebih baru.

  5. Setelah Anda berhasil memigrasikan aplikasi, pilih untuk menggunakan gestur kembali prediktif seperti yang dijelaskan di bagian berikut.

Memilih untuk menggunakan gestur kembali prediktif

Setelah menentukan cara mengupdate aplikasi berdasarkan kasus, Anda dapat dengan mudah memilih untuk mendukung gestur kembali prediktif.

Untuk memilih mendukung, dalam AndroidManifest.xml di tag <application>, setel flag android:enableOnBackInvokedCallback ke true.

<application
    ...
    android:enableOnBackInvokedCallback="true"
    ... >
...
</application>

Jika Anda tidak memberikan nilai, setelah default false akan digunakan dan menonaktifkan gestur kembali prediktif.

Menguji animasi gestur kembali prediktif

Mulai rilis final Android 13, Anda akan dapat mengaktifkan opsi developer untuk menguji animasi "kembali ke layar utama" yang ditampilkan pada gambar 1.

Untuk menguji animasi ini, selesaikan langkah-langkah berikut:

  1. Di perangkat, buka Setelan > Sistem > Opsi developer.

  2. Pilih Animasi kembali prediktif.

  3. Luncurkan aplikasi yang telah diupdate, dan gunakan gestur kembali untuk melihat cara kerjanya.