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 gest cofania może wyświetlić animowany podgląd ekranu głównego za aplikacją, jak pokazano na makiecie na rysunku 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 nawigacji, uaktualnij je do wersji AndroidX Activity 1.6.0-alpha05 lub nowszej.
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 |
Nieobsługiwane interfejsy API platform | Migracja do interfejsów API AndroidaX aplikacji na Androida X, które zawierają nieobsługiwane interfejsy API nawigacji wstecz, | |
Nie | Interfejsy API nieobsługiwanych platform, które można przenieść | Przejście z aplikacji korzystającej z nieobsługiwanych interfejsów API nawigacji wstecz na interfejsy API platformy |
Nieobsługiwane interfejsy API platformy, ale nie można przeprowadzić migracji | Odłóż zgodę do czasu, aż ta funkcja stanie się wymagana |
Migracja poprzedniej wersji nawigacji na AndroidzieX
Ten przypadek użycia jest najczęstszy (i najbardziej zalecany). 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"
Włącz gest przewidywanego przejścia wstecz zgodnie z opisem na tej stronie.
Migracja aplikacji AndroidX zawierającej nieobsługiwane interfejsy API nawigacji wstecz na interfejsy AndroidX
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
Zaktualizuj do 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"
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ą.
Migracja 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ę w funkcji
OnBackInvokedCallback
za pomocą funkcjionBackInvokedDispatcher
. 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.Gdy chcesz przestać przechwytywać gest wstecz, zarejestruj
OnBackInvokedCallback
. 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 się to zdarzyć, gdy migrujesz z onKeyPreIme()
i Twoje wywołanie zwrotne musi otrzymać gest wstecz zamiast otwartego 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ę.
Akceptacja na poziomie aktywności
Od Androida 14 flaga android:enableOnBackInvokedCallback
umożliwia
włączysz prognozowane animacje systemowe na poziomie aktywności. Takie działanie
ł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 flagi android:enableOnBackInvokedCallback
należy wziąć pod uwagę te kwestie:
- Ustawienie
android:enableOnBackInvokedCallback=false
wyłącza przewidywane animacje wsteczne na poziomie aktywności lub aplikacji (w zależności od tego, gdzie ustawisz tag), a także zleci systemowi zignorowanie 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 interfejsu użytkownika, który włącza i wyłącza poszczególne wywołania zwrotne.
Stan interfejsu to właściwość opisująca interfejs użytkownika. Zalecamy wykonanie tych ogólnych czynności.
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 wcześniej powiązała logikę cofnięcia z oświadczeniami warunkowymi, może to oznaczać, że reagujesz na zdarzenie cofnięcia po tym, jak już nastąpiło. Należy unikać takiego wzorca w przypadku nowych 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 wywołań zwrotnych systemu do wykonywania logiki interfejsu, np. wyświetlania wyskakującego okienka lub animacji.
Jeśli Twoja aplikacja umożliwia wywołanie systemu wstecz, animacje przewidujące nie są uruchamiane i musisz obsłużyć zdarzenie 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 przypadków aktywności do aktywności lub fragmentu do aktywności odnotuj, czy
isFinishing
wonDestroy
jesttrue
w cyklu życia aktywności. - W przypadku fragmentów względem siebie rejestruj, czy w funkcji
isRemoving
w elementachonDestroy
jest spełniony warunek true w cyklu życia widoku fragmentu. Możesz też rejestrować za pomocą metodonBackStackChangeStarted
lubonBackStackChangeCommitted
w elementachFragmentManager.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ż do modułu rozsyłającego można dodać wiele wywołań zwrotnych. 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
Od wersji końcowej Androida 13 możesz włączyć opcję dla deweloperów, aby przetestować animację powrotu do ekranu głównego, która jest widoczna na rysunku 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.