![](https://developer.android.com/static/images/about/versions/13/predictive-back-nav-home.gif?authuser=9&hl=de)
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“:
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"
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:
Migrieren Sie die Back-Handling-Logik Ihres Systems zur
OnBackPressedDispatcher
mit einer Implementierung vonOnBackPressedCallback
Eine ausführliche Anleitung finden Sie unter Benutzerdefinierte Rückwärtsnavigation anbieten:Deaktiviere die
OnBackPressedCallback
, wenn du bereit bist, das Abfangen des Back-Ends zu beenden Touch-Geste.Stoppen Sie das Abfangen von Ereignissen über
OnBackPressed
oderKeyEvent.KEYCODE_BACK
.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"
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:
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.Registrieren Sie Ihre benutzerdefinierte Back-Logik in
OnBackInvokedCallback
mitonBackInvokedDispatcher
. 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.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) */ } ); } }
Abfangen von Ereignissen über
OnBackPressed
oderKeyEvent.KEYCODE_BACK
beenden für Android 13 und höher.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, aberOnBackPressedCallback
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 derOnBackInvokedCallback
-Plattform-API ignoriert werden.OnBackPressedCallback
-Aufrufe werden jedoch weiterhin ausgeführt,OnBackPressedCallback
ist abwärtskompatibel und ruft dieonBackPressed
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.
Bestimmen Sie den UI-Status, mit dem die einzelnen Callbacks aktiviert und deaktiviert werden.
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
inonDestroy
hat den Werttrue
innerhalb des Aktivitätslebenszyklus. - Bei Fällen von Fragmenten zu Fragmenten wird protokolliert, wenn
isRemoving
inonDestroy
gleich true innerhalb des Ansichtslebenszyklus des Fragments; oder Protokoll mitonBackStackChangeStarted
- oderonBackStackChangeCommitted
-Methoden innerhalbFragmentManager.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:
Rufen Sie auf Ihrem Gerät Einstellungen > System > Entwickleroptionen.
Wählen Sie Hintergrundanimationen vorausschauend aus.
Starte die aktualisierte App und verwende die Touch-Geste „Zurück“, um sie in Aktion zu sehen.