![](https://developer.android.com/static/images/about/versions/13/predictive-back-nav-home.gif?authuser=9&hl=pl)
Android 14 (poziom interfejsu API 34) dodaje obsługę dodatkowych animacji systemowych i interfejsów API w celu tworzenia animacji niestandardowych. Więcej informacji: Dodano obsługę wbudowanych i niestandardowych animacji wstecznych (prognozowanych).
Na przykład użycie gestu cofania może spowodować wyświetlenie animowanego podglądu na ekranie głównym aplikacji, tak jak na ilustracji 1. Począwszy od Androida 13: przetestuj tę animację powrotu na stronę główną, włączając opcję programisty (jak opisano na tej stronie).
Obsługa gestu przewidywanego cofania wymaga aktualizacji aplikacji za pomocą
zgodność wsteczna
OnBackPressedCallback
AppCompat 1.6.0-alpha05
(AndroidX) lub nowszy interfejs API albo nowy interfejs API OnBackInvokedCallback
API platformy. Większość aplikacji będzie używać zgodnego wstecznie interfejsu API AndroidX.
Ta aktualizacja zapewnia ścieżkę migracji, która pozwala prawidłowo przechwycić nawigację wsteczną,
co obejmuje zastąpienie przechwytów wstecznych z KeyEvent.KEYCODE_BACK
i wszystkich klas z metodami onBackPressed
, takimi jak Activity
czy
Dialog
z nowym systemowym interfejsami Back API.
Ćwiczenia z programowania i konferencje Google I/O
Oprócz skorzystania z dokumentacji dostępnej na tej stronie wypróbuj też nasze ćwiczenia z programowania. Udostępnia typową implementację przypadku użycia komponentu WebView obsługującego gestu przewidywanego wstecznego za pomocą interfejsów AndroidX Activity API.
Zachęcamy też do obejrzenia filmu z konferencji Google I/O, w którym przedstawiamy dodatkowe przykłady wdrażanie interfejsów API platformy AndroidX i platformy.
Aktualizowanie aplikacji, która używa domyślnej nawigacji wstecz
Aktualizowanie aplikacji w celu obsługi tej funkcji jest proste, jeśli aplikacja nie obsługuje tej funkcji nie stosować niestandardowych funkcji cofania (inaczej mówiąc, zmniejsza to obsługę klienta do systemu). Włącz tę funkcję w sposób opisany w Google.
Jeśli Twoja aplikacja używa fragmentów lub komponentu Nawigacja, zaktualizuj ją też do Aktywność w Androidzie 1.6.0-alfa05 lub wyższą.
Aktualizowanie aplikacji, która używa niestandardowej nawigacji wstecz
Jeśli Twoja aplikacja ma skonfigurowane niestandardowe działanie cofania, dostępne będą różne ścieżki migracji w zależności od tego, czy używa AndroidaX i jak obsługuje nawigację wstecz.
Twoja aplikacja korzysta z AndroidaX | Jak aplikacja obsługuje nawigację wstecz | Zalecana ścieżka migracji (link na tej stronie) |
Tak | Interfejsy API AndroidX | Migracja istniejącej implementacji AndroidaX |
Interfejsy API nieobsługiwanej platformy | Migracja do interfejsów API AndroidaX aplikacji na Androida X, które zawierają nieobsługiwane interfejsy API nawigacji wstecz, | |
Nie | Interfejsy API platformy nieobsługiwanej platformy, możliwe do migracji | Przenoszenie aplikacji, która korzysta z nieobsługiwanych interfejsów API nawigacji wstecz, do interfejsów API platformy |
Migracja nie jest możliwa w przypadku nieobsługiwanych interfejsów API platformy | Odłóż zgodę do czasu, aż ta funkcja stanie się wymagana |
Migracja poprzedniej wersji nawigacji na AndroidzieX
Jest to najczęstszy (i najbardziej zalecany) przypadek użycia. Ma zastosowanie do nowych
lub w istniejących aplikacjach, które implementują niestandardową obsługę nawigacji przy użyciu gestów
OnBackPressedDispatcher
, jak opisano w
Skonfiguruj niestandardową nawigację Wstecz.
Jeśli Twoja aplikacja należy do tej kategorii, wykonaj poniższe czynności, aby dodać obsługę gest przewidywanego przejścia wstecz:
Aby mieć pewność, że interfejsy API, które używają już
OnBackPressedDispatcher
interfejsów API, (np. Fragmenty czy Komponent Nawigacja) bezproblemowo współpracują z gest przewidywania tekstu wstecz, przejdź na Aktywność na Androidzie 1.6.0-alfa05.// In your build.gradle file: dependencies { // Add this in addition to your other dependencies implementation "androidx.activity:activity:1.6.0-alpha05"
Wyrażanie zgody na gest cofania się, tak jak to opisano na tę stronę.
Przenoszenie aplikacji na AndroidaX, które zawierają nieobsługiwane interfejsy API nawigacji wstecz, do interfejsów API AndroidaX
Jeśli Twoja aplikacja korzysta z bibliotek AndroidaX, ale implementuje lub odwołuje się do nieobsługiwanych interfejsów API wstecznej nawigacji, musisz przejść na interfejsy API AndroidX. pod kątem obsługi nowych zasad.
Aby przenieść nieobsługiwane interfejsy API do interfejsów AndroidX:
Przenieś logikę obsługi wstecznej systemu do AndroidaX
OnBackPressedDispatcher
z implementacjąOnBackPressedCallback
Szczegółowe wskazówki znajdziesz w artykule Skonfiguruj niestandardową nawigację Wstecz.Wyłącz
OnBackPressedCallback
, gdy chcesz przestać przechwytywać plecy gest.Zatrzymaj przechwytywanie zdarzeń wstecznych za pomocą funkcji
OnBackPressed
lubKeyEvent.KEYCODE_BACK
Pamiętaj, aby przejść na Aktywność na AndroidzieX w wersji 1.6.0-alfa05.
// In your build.gradle file: dependencies { // Add this in addition to your other dependencies implementation "androidx.activity:activity:1.6.0-alpha05"
Gdy przeniesiesz aplikację, włącz funkcję przewidywania tekstu Wstecz (tak jak to opisano w tę stronę), aby zobaczyć animację systemu powrotu na stronę główną.
Przenoszenie aplikacji, która korzysta z nieobsługiwanych interfejsów API nawigacji wstecz, do interfejsów API platformy
Jeśli aplikacja nie może używać bibliotek AndroidaX, a zamiast tego implementuje
odniesienia do niestandardowej nawigacji Wstecz przy użyciu nieobsługiwanych interfejsów API, musisz dokonać migracji.
do interfejsu API platformy OnBackInvokedCallback
.
Aby przenieść nieobsługiwane interfejsy API do interfejsu API platformy, wykonaj te czynności:
używać nowego interfejsu API
OnBackInvokedCallback
na urządzeniach z Androidem 13 lub i korzystać z nieobsługiwanych interfejsów API na urządzeniach z Androidem 12 lub obniżysz się.Zarejestruj niestandardową logikę cofania w usłudze
OnBackInvokedCallback
w:onBackInvokedDispatcher
Uniemożliwia to zapisanie bieżącej aktywności na koniec, a oddzwonienie ma szansę zareagować na akcję Wstecz użytkownik kończy w systemie nawigację wstecz.Wyrejestruj
OnBackInvokedCallback
, gdy chcesz przestać przechwytywać gest cofania. W przeciwnym razie użytkownicy mogą zauważyć niepożądane zachowanie podczas korzystania z powrót do poprzedniego systemu, np. „utknięcie”; między widokami zmuszając ich do zamknięcia aplikacji.Oto przykład migracji logiki z
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) */ } ); } }
Przestań przechwytywać zdarzenia za pomocą funkcji
OnBackPressed
lubKeyEvent.KEYCODE_BACK
na Androida 13 lub nowszego.Gdy przeniesiesz aplikację, włącz funkcję przewidywania tekstu Wstecz (tak jak to opisano w tę stronę), aby zasada
OnBackInvokedCallback
zaczęła obowiązywać.
Możesz zarejestrować OnBackInvokedCallback
u dostawcy PRIORITY_DEFAULT
lub
PRIORITY_OVERLAY
, niedostępnej na podobnych urządzeniach z AndroidemX
OnBackPressedCallback
Rejestracja wywołania zwrotnego u sprzedawcy PRIORITY_OVERLAY
to
w niektórych przypadkach. Może to mieć zastosowanie podczas migracji
od użytkownika onKeyPreIme()
, a oddzwonienie musi odczytać gest cofania
otwartego edytora IME. edytory IME rejestrują wywołania zwrotne za pomocą funkcji PRIORITY_DEFAULT
po otwarciu.
Zarejestruj oddzwonienie u firmy PRIORITY_OVERLAY
, aby mieć pewność,
OnBackInvokedDispatcher
wysyła gest cofnięcia do wywołania zwrotnego
otwartego edytora IME.
Wyraź zgodę na gest przewidywanego przejścia wstecz
Gdy już zdecydujesz, jak zaktualizować aplikację w zależności od przypadku, włącz obsługującego gest przewidywania tekstu wstecz.
Aby włączyć tę funkcję, w sekcji AndroidManifest.xml
w tagu <application>
ustaw parametr
android:enableOnBackInvokedCallback
flaga do true
.
<application
...
android:enableOnBackInvokedCallback="true"
... >
...
</application>
Jeśli nie podasz wartości, zostanie użyta domyślna wartość false
:
- Wyłącza animację systemową gestów przewidywania.
- Ignoruje połączenia
OnBackInvokedCallback
, aleOnBackPressedCallback
mogą kontynuować pracę.
Wyrażanie zgody na poziomie aktywności
Od Androida 14 flaga android:enableOnBackInvokedCallback
umożliwia
włączysz prognozowane animacje systemowe na poziomie aktywności. To zachowanie
łatwiejsza w zarządzaniu jest migracja dużych aplikacji o wielu
działaniach do aplikacji prognozującej,
gestami wstecz.
Poniżej znajduje się przykład użycia funkcji enableOnBackInvokedCallback
do:
włącz animację systemu powrotu na stronę główną z elementu MainActivity
:
<manifest ...>
<application . . .
android:enableOnBackInvokedCallback="false">
<activity
android:name=".MainActivity"
android:enableOnBackInvokedCallback="true"
...
</activity>
<activity
android:name=".SecondActivity"
android:enableOnBackInvokedCallback="false"
...
</activity>
</application>
</manifest>
W poprzednim przykładzie ustawienie atrybutu android:enableOnBackInvokedCallback=true
dla atrybutu
".SecondActivity"
włącza animację systemu obejmującego wiele aktywności.
Podczas korzystania z atrybutu
Flaga android:enableOnBackInvokedCallback
:
- Ustawienie
android:enableOnBackInvokedCallback=false
wyłącza prognozowanie z powrotem w animacji – na etapie na poziomie aplikacji lub na poziomie aplikacji, w zależności od tego, gdzie został ustawiony tag, i zawiera instrukcje system ignorowania wywołań interfejsu API platformyOnBackInvokedCallback
. WywołaniaOnBackPressedCallback
są jednak nadal wykonywane, ponieważ FunkcjaOnBackPressedCallback
jest zgodna wstecznie i wywołuje metodęonBackPressed
API, który nie jest obsługiwany w wersjach starszych niż Android 13. - Ustawienie flagi
enableOnBackInvokedCallback
na poziomie aplikacji ustanawia domyślną wartość dla wszystkich aktywności w aplikacji. Możesz zastąpić domyślnie za aktywność, ustawiając flagę na poziomie aktywności, tak jak w sekcji z poprzedniego przykładu kodu.
Sprawdzone metody dotyczące wywołań zwrotnych
Oto sprawdzone metody korzystania z obsługiwanych systemowych wywołań zwrotnych:
BackHandler
(tworzenie wiadomości), OnBackPressedCallback
lub
OnBackInvokedCallback
Określ stan UI, który włącza i wyłącza każde wywołanie zwrotne
Stan interfejsu to właściwość opisująca interfejs użytkownika. Zalecamy przestrzeganie tych zasad kroków.
Określ stan interfejsu, w którym każde wywołanie zwrotne zostanie włączone lub wyłączone.
Zdefiniuj ten stan za pomocą obserwowalnego posiadacza danych type, na przykład
StateFlow
lub Utwórz stan i włącz lub wyłącz wywołanie zwrotne po zmianie stanu.
Jeśli Twoja aplikacja łączyła wcześniej logikę wsteczną z instrukcjami warunkowymi, może to oznaczać, że zareagujesz na zdarzenie wstecz, gdy miało ono miejsce już wystąpił – wzorzec, którego należy unikać w przypadku nowszych wywołań zwrotnych. Jeśli to możliwe, przenieś wywołanie zwrotne poza instrukcję warunkową, a zamiast tego powiązania wywołania zwrotnego z obserwowalnym typem właściciela danych,
Używaj systemowych wywołań zwrotnych w UI Logic
Elementy interfejsu określa sposób wyświetlania UI. Używaj systemowych wywołań zwrotnych do uruchamiania logiki interfejsu, takiej jak przy wyświetlaniu wyskakującego okienka lub animacji.
Jeśli aplikacja zezwala na wywołanie zwrotne systemu, animacje prognozowane nie są uruchamiane Trzeba zająć się zdarzeniem wstecz. Nie twórz wyłącznie wywołań zwrotnych w celu uruchamiania bez interfejsu użytkownika logikę logiczną.
Jeśli np. przechwytujesz zdarzenia tylko w celu rejestrowania, zaloguj się w Cykl życia aktywności lub fragmentu.
- W przypadku zgłoszeń dotyczących aktywności lub fragmentów do aktywności zapisz, jeśli
isFinishing
wonDestroy
ma wartośćtrue
w cyklu życia aktywności. - W przypadku przypadków z fragmentami na fragmenty rejestruj, jeśli
isRemoving
wonDestroy
to true w ramach cyklu życia widoku fragmentu; lub, zaloguj się za pomocą MetodyonBackStackChangeStarted
lubonBackStackChangeCommitted
wFragmentManager.OnBackStackChangedListener
.
W przypadku zgłoszenia utwórz log w wywołaniu zwrotnym onCleared()
wywołania ViewModel
powiązane z miejscem docelowym tworzenia wiadomości. To najlepszy sygnał, aby wiedzieć,
gdy miejsce docelowe tworzenia wiadomości zostało wyrzucone ze stosu wstecznego i zniszczone.
Tworzenie pojedynczych wywołań zwrotnych
Jest to możliwe, ponieważ możesz dodać wiele wywołań zwrotnych do dyspozytora. Wywołania zwrotne są dodawane do stosu, w którym ostatnio dodano włączone wywołanie zwrotne obsługuje następny gest cofania z jednym wywołaniem zwrotnym na każdy gest wstecz.
Przetestuj animację gestu przewidywania gestu wstecz
Począwszy od ostatecznej wersji Androida 13, powinno być możliwe włączenie jako opcję dla programistów, która pozwala przetestować powrót do strony głównej przedstawioną na rys. 1.
Aby przetestować tę animację, wykonaj te czynności:
Na urządzeniu wybierz kolejno Ustawienia > System > Opcje programisty.
Wybierz Animacje przewidywanego przejścia wstecz.
Uruchom zaktualizowaną aplikację i użyj gestu cofania, aby zobaczyć, jak działa ta wersja.