Unterstützung für die vorausschauende „Zurück“-Touch-Geste hinzufügen

<ph type="x-smartling-placeholder">
</ph>
Abbildung 1. Mockup der vorausschauenden Touch-Geste „Zurück“ auf einem Smartphone

Android 14 (API-Level 34) unterstützt zusätzliche Systemanimationen und APIs benutzerdefinierte Animationen erstellen. Weitere Informationen finden Sie unter Unterstützung für integrierte und benutzerdefinierte zurückspulende Animationen

Mit einer „Zurück“-Touch-Geste können Sie z. B. eine animierte Vorschau Startbildschirm hinter Ihrer App, wie in dem Modell in Abbildung 1 dargestellt. Ab Android 13 können Sie Diese Back-to-Home-Animation testen, indem Sie eine Entwickleroption aktivieren wie auf dieser Seite beschrieben.

Um die Touch-Geste „Zurücksagen“ zu unterstützen, musst du deine App aktualisieren. Verwende dazu die abwärtskompatibel OnBackPressedCallback AppCompat 1.6.0-alpha05 (AndroidX) oder höher oder die neue OnBackInvokedCallback-Version verwenden Plattform-API. Die meisten Apps verwenden die abwärtskompatible AndroidX API.

Dieses Update bietet einen Migrationspfad, um die Rückwärtsnavigation ordnungsgemäß abzufangen. das Ersatz von Back-Interceptions von KeyEvent.KEYCODE_BACK und alle Klassen mit onBackPressed-Methoden wie Activity und Dialog mit den neuen System Back APIs.

Video zu Codelab und Google I/O

Sie können nicht nur die Dokumentation auf dieser Seite verwenden, sondern auch unser Codelab ausprobieren. Es bietet eine gängige Implementierung einer WebView, die den „Zurück“-Touch-Geste mit AndroidX Activity APIs.

Sie können sich auch unser Google I/O-Video ansehen, in dem Sie weitere Beispiele Implementierung von AndroidX und Platform APIs.

App aktualisieren, die die standardmäßige „Zurück“-Navigation verwendet

Es ist ganz einfach, die App zur Unterstützung dieser Funktion zu aktualisieren, wenn dies nicht der Fall ist. benutzerdefiniertes Backverhalten implementieren (d. h., die Back- an das System). Aktivieren Sie diese Funktion wie hier beschrieben. .

Wenn Ihre App Fragmente oder die Navigationskomponente verwendet, führen Sie auch ein Upgrade auf AndroidX Activity 1.6.0-alpha05 oder höher.

App aktualisieren, die benutzerdefinierte Rückwärtsnavigation verwendet

Wenn Ihre Anwendung ein benutzerdefiniertes Back-Verhalten implementiert, gibt es verschiedene Migrationspfade abhängig davon, ob AndroidX verwendet wird und wie die Rückwärtsnavigation gehandhabt wird.

Deine App verwendet AndroidX So funktioniert die Rückwärtsnavigation in Ihrer App Empfohlener Migrationspfad (Link auf dieser Seite)
Ja AndroidX-APIs Vorhandene AndroidX-Back-Implementierung migrieren
Nicht unterstützte Plattform-APIs Eine AndroidX-App mit nicht unterstützten APIs zur Rücknavigation zu AndroidX APIs migrieren
Nein Nicht unterstützte Plattform-APIs, Migration möglich Eine App, die nicht unterstützte Zurücknavigations-APIs verwendet, zu Plattform-APIs migrieren
Nicht unterstützte Plattform-APIs können aber nicht migriert werden Aktivierung verschieben, bis diese Funktion erforderlich wird

AndroidX-Implementierung für die Rückwärtsnavigation migrieren

Dies ist der häufigste (und der am häufigsten empfohlene) Anwendungsfall. Sie gilt für neue oder bestehende Apps, die eine benutzerdefinierte Bedienung über Gesten mit OnBackPressedDispatcher, wie in Benutzerdefinierte Rückwärtsnavigation anbieten:

Wenn deine App in diese Kategorie fällt, führe die folgenden Schritte aus, um Unterstützung für die automatische Touch-Geste „Zurück“:

  1. Um sicherzustellen, dass APIs, die bereits OnBackPressedDispatcher APIs verwenden, (wie Fragmente und die Navigationskomponente) nahtlos mit dem vorausschauende Touch-Geste „Zurück“, Upgrade auf 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. Die automatische Vervollständigung für „Zurück“ aktivieren, wie unter auf dieser Seite.

AndroidX-App mit nicht unterstützten APIs zur Rücknavigation zu AndroidX APIs migrieren

Wenn Ihre App AndroidX-Bibliotheken verwendet, aber die API implementiert oder auf sie verweist nicht unterstützte Back-Navigations-APIs verwenden, müssen Sie zu AndroidX-APIs migrieren. um das neue Verhalten zu unterstützen.

So migrieren Sie nicht unterstützte APIs zu AndroidX APIs:

  1. Migrieren Sie die Back-Handling-Logik Ihres Systems zur OnBackPressedDispatcher mit einer Implementierung von OnBackPressedCallback Eine ausführliche Anleitung finden Sie unter Benutzerdefinierte Rückwärtsnavigation anbieten:

  2. Deaktiviere die OnBackPressedCallback, wenn du bereit bist, das Abfangen des Back-Ends zu beenden Touch-Geste.

  3. Stoppen Sie das Abfangen von Ereignissen über OnBackPressed oder KeyEvent.KEYCODE_BACK.

  4. Führen Sie ein Upgrade auf 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. Wenn Sie Ihre Anwendung erfolgreich migriert haben, der automatischen Vervollständigung der Touch-Geste „Zurück“ aktivieren (siehe Beschreibung auf auf dieser Seite), um die Back-to-Home-Systemanimation zu sehen.

App, die nicht unterstützte APIs zur Rücknavigation verwendet, zu Plattform-APIs migrieren

Wenn Ihre App keine AndroidX-Bibliotheken verwenden kann und stattdessen Verweis auf die benutzerdefinierte Zurück-Navigation mit den nicht unterstützten APIs, müssen Sie mit der OnBackInvokedCallback-Plattform-API.

Führen Sie die folgenden Schritte aus, um nicht unterstützte APIs zur Plattform-API zu migrieren:

  1. Die neue OnBackInvokedCallback API auf Geräten mit Android 13 oder und die nicht unterstützten APIs auf Geräten mit Android 12 oder darunter.

  2. Registrieren Sie Ihre benutzerdefinierte Back-Logik in OnBackInvokedCallback mit onBackInvokedDispatcher. Dadurch wird verhindert, dass die aktuelle Aktivität Sobald der Vorgang abgeschlossen ist, kann Ihr Callback einmal auf die Aktion „Zurück“ reagieren. Die Nutzenden schließen die Zurück-Navigation des Systems ab.

  3. Registrierung von OnBackInvokedCallback aufheben, wenn Sie bereit sind, das Abfangen des „Zurück“-Touch-Geste. Andernfalls bemerken Nutzer möglicherweise ein unerwünschtes Verhalten, wenn sie eine System „Zurück“-Navigation, z. B. „nicht weiterkommen“ zwischen Aufrufen und z. B. das Beenden der App zu erzwingen.

    Hier ein Beispiel für die Migration der Logik aus 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. Abfangen von Ereignissen über OnBackPressed oder KeyEvent.KEYCODE_BACK beenden für Android 13 und höher.

  5. Wenn Sie Ihre Anwendung erfolgreich migriert haben, der automatischen Vervollständigung der Touch-Geste „Zurück“ aktivieren (siehe Beschreibung auf auf dieser Seite), damit OnBackInvokedCallback wirksam wird.

Du kannst eine OnBackInvokedCallback bei PRIORITY_DEFAULT registrieren oder PRIORITY_OVERLAY, das in der ähnlichen Version von AndroidX nicht verfügbar ist OnBackPressedCallback. Die Registrierung eines Callbacks bei PRIORITY_OVERLAY ist ist in manchen Fällen hilfreich. Dies kann beispielsweise auf die Migration zutreffen. von onKeyPreIme() und dein Callback muss stattdessen die „Zurück“-Touch-Geste erhalten eines geöffneten IMEs. IMEs registrieren Callbacks beim Öffnen mit PRIORITY_DEFAULT. Registrieren Sie Ihren Callback bei PRIORITY_OVERLAY, um sicherzustellen, OnBackInvokedDispatcher leitet stattdessen die „Zurück“-Geste an deinen Callback weiter des geöffneten IMEs.

„Zurück“-Touch-Geste aktivieren

Sobald Sie sich für ein Update entschieden haben, die die voraussagende „Zurück“-Touch-Geste unterstützen.

Für die Aktivierung legen Sie in AndroidManifest.xml im <application>-Tag den Wert android:enableOnBackInvokedCallback in true.

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

Wenn Sie keinen Wert angeben, wird standardmäßig false verwendet und Folgendes gilt:

  • Dadurch wird die Systemanimation zur automatischen Vervollständigung des Touch-Gestens „Zurück“ deaktiviert.
  • OnBackInvokedCallback wird ignoriert, aber OnBackPressedCallback Aufrufe weiterzuarbeiten.

Auf Aktivitätsebene aktivieren

Ab Android 14 kann das Flag android:enableOnBackInvokedCallback aktivieren Sie Systemanimationen auf Aktivitätsebene. Dieses Verhalten macht es einfacher, große Apps mit mehreren Aktivitäten zu „Zurück“-Touch-Gesten.

Der folgende Code zeigt ein Beispiel für die Verwendung von enableOnBackInvokedCallback zum Aktivieren Sie die Back-to-Home-Systemanimation von MainActivity:

<manifest ...>
    <application . . .

        android:enableOnBackInvokedCallback="false">

        <activity
            android:name=".MainActivity"
            android:enableOnBackInvokedCallback="true"
            ...
        </activity>
        <activity
            android:name=".SecondActivity"
            android:enableOnBackInvokedCallback="false"
            ...
        </activity>
    </application>
</manifest>

Im vorherigen Beispiel wird android:enableOnBackInvokedCallback=true für ".SecondActivity" aktiviert die aktivitätsübergreifende Systemanimation.

Beachten Sie bei der Verwendung des android:enableOnBackInvokedCallback-Flag:

  • Mit der Einstellung „android:enableOnBackInvokedCallback=false“ wird die automatische Vervollständigung deaktiviert entweder bei der Aktivität oder auf App-Ebene erfolgen, je nachdem, wo Sie das Tag System so, dass Aufrufe der OnBackInvokedCallback-Plattform-API ignoriert werden. OnBackPressedCallback-Aufrufe werden jedoch weiterhin ausgeführt, OnBackPressedCallback ist abwärtskompatibel und ruft die onBackPressed auf API, die vor Android 13 nicht mehr unterstützt wird.
  • Durch Festlegen des Flags enableOnBackInvokedCallback auf Anwendungsebene wird Standardwert für alle Aktivitäten in der App Sie können die Standard-pro-Aktivität durch Setzen des Flags auf Aktivitätsebene, wie in im vorherigen Codebeispiel.

Best Practices für Rückrufe

Im Folgenden finden Sie Best Practices für die Verwendung der unterstützten System-Rückrufe: BackHandler (zum Schreiben), OnBackPressedCallback oder OnBackInvokedCallback

Bestimmen Sie den UI-Status, der die einzelnen Callbacks aktiviert und deaktiviert

Status der Benutzeroberfläche ist eine Eigenschaft, die die Benutzeroberfläche beschreibt. Wir empfehlen, diese allgemeinen Schritte.

  1. Bestimmen Sie den UI-Status, mit dem die einzelnen Callbacks aktiviert und deaktiviert werden.

  2. Definieren Sie diesen Status mithilfe eines Inhabers von beobachtbaren Daten Typ wie StateFlow oder Zusammensetzung des Status und Aktivieren oder Deaktivieren des Callbacks, wenn sich der Status ändert.

Wenn Ihre App zuvor Rücklogik mit bedingten Anweisungen verknüpft hat, Das könnte bedeuten, dass Sie auf das Ereignis vom Typ „Zurück“ reagieren, bereits aufgetreten – ein Muster, das Sie bei neueren Callbacks vermeiden sollten. Verschieben Sie den Callback nach Möglichkeit aus der bedingten Anweisung heraus den Callback mit einem beobachtbaren Dateninhabertyp verknüpfen.

System-Back-Callbacks für UI Logic verwenden

UI-Logik gibt vor, wie die Benutzeroberfläche angezeigt wird. Verwenden Sie System-Back-Callbacks, um Benutzeroberflächenlogik auszuführen, z. B. Pop-up-Fenster öffnen oder eine Animation ausführen.

Wenn deine App einen System-Back-Callback aktiviert, werden die Vorhersageanimationen nicht ausgeführt und Sie müssen das Back-Ereignis verarbeiten. Keine Callbacks erstellen, die nur auf der Benutzeroberfläche basieren Logik.

Wenn Sie beispielsweise Ereignisse nur zur Protokollierung abfangen, protokollieren Sie sie im Stattdessen gibt es die Aktivität oder den Fragmentlebenszyklus.

  • Für Aktivitäten-zu-Aktivität-Fälle oder Fragment-zu-Aktivität-Fälle protokollieren Sie, wenn isFinishing in onDestroy hat den Wert true innerhalb des Aktivitätslebenszyklus.
  • Bei Fällen von Fragmenten zu Fragmenten wird protokolliert, wenn isRemoving in onDestroy gleich true innerhalb des Ansichtslebenszyklus des Fragments; oder Protokoll mit onBackStackChangeStarted- oder onBackStackChangeCommitted-Methoden innerhalb FragmentManager.OnBackStackChangedListener

Protokolliere für den Fall „Compose“ im onCleared()-Callback eines ViewModel-Elements die mit dem E-Mail-Ziel verknüpft sind. Dies ist das beste Signal, um zu wissen, Ein Erstellungsziel wird vom Back-Stack getrennt und zerstört.

Callbacks für einzelne Verantwortung erstellen

Dies ist möglich, weil Sie dem Disponenten mehrere Rückrufe hinzufügen können. Die Callbacks werden einem Stapel hinzugefügt, in dem der zuletzt hinzugefügte aktivierte Callback enthalten ist. verarbeitet die nächste Zurück-Geste mit einem Callback pro Zurück-Touch-Geste.

Animation mit Vorschlägen für „Zurück“-Touch-Geste testen

Ab der endgültigen Version von Android 13 sollten Sie in der Lage sein, eine Entwickleroption zum Testen der in Abbildung 1 gezeigten Back-to-Home-Animation.

Führen Sie die folgenden Schritte aus, um diese Animation zu testen:

  1. Rufen Sie auf Ihrem Gerät Einstellungen > System > Entwickleroptionen.

  2. Wählen Sie Hintergrundanimationen vorausschauend aus.

  3. Starte die aktualisierte App und verwende die Touch-Geste „Zurück“, um sie in Aktion zu sehen.