Android 14 (API düzeyi 34), ilave sistem animasyonları ve API'ler için destek sağlar. özel animasyonlar oluşturun. Daha fazla bilgi için bkz. Yerleşik ve özel tahmine dayalı geri animasyonlar için destek ekleyin.
Örneğin, geri hareketini kullandığınızda şu öğenin animasyonlu bir önizlemesini görüntüleyebilirsiniz: Şekil 1'deki modelde gösterildiği gibi uygulamanızın arkasındaki Ana ekran. Android 13 sürümünden itibaren şunları yapabilirsiniz: bir geliştirici seçeneğini etkinleştirerek bu ana sayfaya dönüş animasyonunu test edin (bu sayfada açıklandığı şekilde).
Tahmine dayalı geri hareketini desteklemek için uygulamanızın
geriye dönük uyumlu
OnBackPressedCallback
AppCompat 1.6.0-alpha05
(AndroidX) veya daha yeni bir API'yi ya da yeni OnBackInvokedCallback
'i kullanarak
platform API'si ile uyumludur. Çoğu uygulama, geriye dönük uyumlu AndroidX API'sini kullanır.
Bu güncelleme, geri gezinmeye düzgün bir şekilde müdahale etmek için bir taşıma yolu sağlar.
Bu işlem, KeyEvent.KEYCODE_BACK
üzerinden yapılan geri müdahaleleri değiştirmeyi içerir.
ve onBackPressed
yöntemleri olan Activity
ve
Yeni sistem Geri API'leriyle Dialog
.
Codelab ve Google I/O videosu
Bu sayfadaki belgelerden yararlanmanın yanı sıra codelab'imizi de deneyin. Bu, tahmine dayalı geri hareketini birlikte kullanın.
Daha fazla bilgi için ek örnekler içeren Google I/O videomuzu AndroidX ve platform API'lerini uygulamaya koyduk.
Varsayılan geri navigasyonu kullanan bir uygulamayı güncelleme
Uygulamanız güncel değilse bu özelliği destekleyecek şekilde kolayca güncelleme yapabilirsiniz. tüm özel davranışları uygulama (diğer bir deyişle, devre dışı bırakabilirsiniz). Burada açıklandığı şekilde bu özelliği etkinleştirin rehberini inceleyin.
Uygulamanız Parçalar veya Gezinme Bileşeni kullanıyorsa yeni sürüme geçin: AndroidX Etkinlik 1.6.0-alpha05 veya daha yüksek olabilir.
Özel geri gezinme özelliğini kullanan bir uygulamayı güncelleme
Uygulamanız özel geri çalışma davranışı uyguluyorsa farklı taşıma yolları vardır kullanma şekline ve AndroidX'i kullanıp kullanmadığına ve geri gezinmeyi nasıl yaptığına bağlı olarak değişir.
Uygulamanız AndroidX kullanıyor | Uygulamanız geri navigasyonu nasıl işler? | Önerilen taşıma yolu (bu sayfadaki bağlantı) |
Evet | AndroidX API'leri | Mevcut bir AndroidX geri uygulamasını taşıma |
Desteklenmeyen platform API'leri | Desteklenmeyen geri gezinme API'leri içeren bir AndroidX uygulamasını AndroidX API'lerine taşıma | |
Hayır | Desteklenmeyen platform API'leri, taşınabiliyor | Desteklenmeyen geri gezinme API'leri kullanan bir uygulamayı platform API'lerine taşıma |
Platform API'leri desteklenmiyor ancak taşınamıyor | Bu gerekli bir özellik haline gelene kadar etkinleştirme işlemini ertele |
AndroidX geri gezinme uygulamasını taşıma
Bu, en yaygın (ve en çok önerilen) kullanım alanıdır. Bu, yeni
özel hareketle gezinme özelliğini uygulayan mevcut
OnBackPressedDispatcher
, şurada açıklandığı gibi:
Özel geri gezinme sağlayın.
Uygulamanız bu kategoriye giriyorsa söz konusu uygulama için destek eklemek üzere tahmine dayalı geri hareketi:
Hâlihazırda
OnBackPressedDispatcher
API'leri kullanmakta olan API'lerin sağlandığından emin olmak için (Parçalar ve Gezinme Bileşeni gibi), önceki sürümlerin yüklü olduğu tahmine dayalı geri hareketi, şuna yükselt: AndroidX Etkinlik 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"
Tahmine dayalı geri hareketini etkinleştirme bu sayfada.
Desteklenmeyen geri gezinme API'leri içeren bir AndroidX uygulamasını AndroidX API'lerine taşı
Uygulamanız, AndroidX kitaplıklarını kullanıyor, ancak desteklenmeyen geri gezinme API'leri varsa AndroidX API'lerini kullanmaya geçmeniz gerekir. destekleyici materyalleri inceleyeceksiniz.
Desteklenmeyen API'leri AndroidX API'lerine taşımak için:
Sisteminizi AndroidX'in
OnBackPressedDispatcher
örneğindeOnBackPressedCallback
. Ayrıntılı bilgi için bkz. Özel geri gezinme sağlayın.Arkaya müdahale etmeyi durdurmaya hazır olduğunuzda
OnBackPressedCallback
cihazını devre dışı bırakın hareketi yapın.OnBackPressed
aracılığıyla etkinliklere müdahale etmeyi durdurun veyaKeyEvent.KEYCODE_BACK
.Şu aboneliğe yükselttiğinizden emin olun: AndroidX Etkinlik 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"
Uygulamanızı başarıyla taşıdıktan sonra tahmini geri hareketini etkinleştirme (bkz. bu sayfa) ekleyebilirsiniz.
Desteklenmeyen geri gezinme API'leri kullanan bir uygulamayı platform API'lerine taşıma
Uygulamanız, AndroidX kitaplıklarını kullanamıyor ve onun yerine
desteklenmeyen API'ler kullanarak özel Geri gezinmeye referans olduğundan
OnBackInvokedCallback
platform API'sine bağlanıyor.
Desteklenmeyen API'leri platform API'sine taşımak için aşağıdaki adımları tamamlayın:
Android 13 veya sonraki sürümleri çalıştıran cihazlarda yeni
OnBackInvokedCallback
API'yi kullanın ve Android 12 veya sonraki sürümleri çalıştıran cihazlarda desteklenmeyen API'leri daha düşük.OnBackInvokedCallback
içindeki özel geri mantığınızı şununla kaydedin:onBackInvokedDispatcher
. Bu, mevcut etkinliğin engellenmesini ve geri aramanızın bir kez Geri işlemine tepki verme şansı olur, Kullanıcı sistemin Geri gitme işlemini tamamlar.Müdahaleyi durdurmaya hazır olduğunuzda
OnBackInvokedCallback
öğesinin kaydını silin geri hareketi. Aksi takdirde, kullanıcılar sistem Geri gitme; örneğin, "takılma" ile görüntüleme sayısı arasında uygulamanızdan kapanmaya zorlamaktır.Aşağıda,
onBackPressed
mantığının dışına nasıl taşınacağına dair bir örnek verilmiştir: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) */ } ); } }
OnBackPressed
veyaKeyEvent.KEYCODE_BACK
üzerinden etkinliklere müdahale etmeyi durdur Android 13 ve sonraki sürümler için geçerlidir.Uygulamanızı başarıyla taşıdıktan sonra tahmini geri hareketini etkinleştirme (bkz. bu sayfa)
OnBackInvokedCallback
geçerli olur.
Bir OnBackInvokedCallback
ile PRIORITY_DEFAULT
veya
PRIORITY_OVERLAY
, benzer AndroidX'te mevcut değil
OnBackPressedCallback
. PRIORITY_OVERLAY
ile geri arama kaydediliyor
bazı durumlarda faydalı olabilir. Bu durum, taşıma işlemlerinizi
onKeyPreIme()
adlı operatörden gelen geri arama özelliğinin, bunun yerine geri arama hareketini alması gerekiyor
görebilirsiniz. IME'ler, açıldığında PRIORITY_DEFAULT
ile geri çağırma kaydeder.
Geri arama isteğinizi PRIORITY_OVERLAY
ile kaydettirin:
OnBackInvokedDispatcher
, geri aramanıza geri gitme hareketini gönderir
görebilirsiniz.
Tahmine dayalı geri hareketini etkinleştirme
Uygulamanızı durumunuza göre nasıl güncelleyeceğinizi belirledikten sonra tahmine dayalı geri hareketini destekler.
Etkinleştirmek için AndroidManifest.xml
içindeki <application>
etiketinde
true
öğesine android:enableOnBackInvokedCallback
işareti.
<application
...
android:enableOnBackInvokedCallback="true"
... >
...
</application>
Bir değer sağlamazsanız varsayılan olarak false
olur ve şu işlemler gerçekleşir:
- Tahmine dayalı geri hareketi sistem animasyonunu devre dışı bırakır.
OnBackInvokedCallback
yok sayılır, ancakOnBackPressedCallback
çağrı devam edebilir.
Etkinlik düzeyinde etkinleştirme
Android 14 sürümünden itibaren android:enableOnBackInvokedCallback
işaretini kullanarak
etkinlik düzeyinde tahmine dayalı sistem animasyonlarını etkinleştirdiğinizde. Bu davranış
büyük çoklu etkinlik uygulamalarını tahmine dayalı
geri hareketleri.
Aşağıdaki kod, enableOnBackInvokedCallback
ana dönüş sistem animasyonunu MainActivity
bölümünden etkinleştirin:
<manifest ...>
<application . . .
android:enableOnBackInvokedCallback="false">
<activity
android:name=".MainActivity"
android:enableOnBackInvokedCallback="true"
...
</activity>
<activity
android:name=".SecondActivity"
android:enableOnBackInvokedCallback="false"
...
</activity>
</application>
</manifest>
Yukarıdaki örnekte, android:enableOnBackInvokedCallback=true
".SecondActivity"
, etkinlikler arası sistem animasyonunu etkinleştirir.
android:enableOnBackInvokedCallback
işareti:
android:enableOnBackInvokedCallback=false
ayarlandığında tahmine dayalı geri devre dışı bırakılır animasyonları veya etkinlikleri reklam düzeyinde veya uygulama düzeyinde yapabilirsiniz ve sizi Google Analytics'eOnBackInvokedCallback
platform API'sine yapılan çağrıları yoksayması için sistemin AncakOnBackPressedCallback
için yapılan çağrılar şu nedenle çalıştırılmaya devam eder:OnBackPressedCallback
geriye dönük uyumludur veonBackPressed
yöntemini çağırır API.enableOnBackInvokedCallback
işaretinin uygulama düzeyinde ayarlanması, Uygulamadaki tüm etkinlikler için varsayılan değere. aşağıda gösterildiği gibi, etkinlik düzeyinde bayrağı ayarlayarak her etkinlik için varsayılan olarak ayarlayabilirsiniz. önceki kod örneğine bakalım.
Geri arama ile ilgili en iyi uygulamalar
Desteklenen sistem geri çağırmalarının kullanımına ilişkin en iyi uygulamalar şunlardır:
BackHandler
(Oluşturma için), OnBackPressedCallback
veya
OnBackInvokedCallback
.
Her geri çağırmayı etkinleştiren ve devre dışı bırakan kullanıcı arayüzü durumunu belirleme
Kullanıcı arayüzü durumu kullanıcı arayüzünü açıklayan bir özelliktir. Aşağıdaki üst düzey politika adımları.
Her bir geri çağırmayı etkinleştiren ve devre dışı bırakan kullanıcı arayüzü durumunu belirleyin.
Bu durumu gözlemlenebilir veri tutucu kullanarak tanımlayın type (
StateFlow
gibi) veya Durum oluşturun ve durum değiştikçe geri çağırmayı etkinleştirin ya da devre dışı bırakın.
Uygulamanız daha önce mantığı koşullu ifadelerle ilişkilendiriyorsa bu, etkinlik başladıktan sonra geri etkinliğe tepki verdiğinizi gösterebilir. Bu, yeni geri çağırmalarda kaçınmanız gereken bir kalıp olmuştur. Mümkünse geri çağırmayı koşullu ifadenin dışına taşıyın ve geri çağırmayı gözlemlenebilir bir veri sahibi türüyle ilişkilendirme
UI Logic için sistem geri çağırmalarını kullan
Kullanıcı arayüzü mantığı kullanıcı arayüzünün nasıl görüntüleneceğini belirtir. Aşağıdaki gibi kullanıcı arayüzü mantığını çalıştırmak için sistem geri çağırma komutlarını kullanın: bir pop-up görüntüleme veya bir animasyon çalıştırma.
Uygulamanız sistem geri çağırma özelliğini etkinleştirirse tahmine dayalı animasyonlar çalışmaz ve önceki etkinliği sizin gerçekleştirmeniz gerekir. Yalnızca kullanıcı arayüzü olmayan öğeleri çalıştırmak için geri çağırma oluşturmayın mantığıyla başlayalım.
Örneğin, yalnızca günlüğe kaydetmek üzere etkinliklere müdahale ediyorsanız Bunun yerine Etkinlik veya Parça yaşam döngüsünü kullanabilirsiniz.
- Etkinlik-etkinliğe yönelik durumlar veya parçadan etkinliğe-etkinliğe yönelik durumlar için
onDestroy
içindekiisFinishing
, Etkinlik yaşam döngüsündetrue
konumundadır. - Parçadan parçaya durumlar için
onDestroy
içindekiisRemoving
değerine eşitse günlüğe kaydedin. true (doğru), Parçanın görünüm yaşam döngüsü içinde veyaonBackStackChangeStarted
veyaonBackStackChangeCommitted
yöntem içindeFragmentManager.OnBackStackChangedListener
.
Oluşturma destek kaydı için ViewModel
öğesinin onCleared()
geri çağırmasına giriş yapın
Compose hedefiyle ilişkilidir. Bu, en iyi performansı gösteren
Bir oluşturma hedefi arka yığından çıkarılıp kaldırıldığında.
Tek sorumluluk geri çağırmaları oluşturun
Bu, sevk görevlisine birden fazla geri arama ekleyebildiğinizden mümkündür. Geri çağırmalar, en son eklenen etkin geri çağırmanın bulunduğu bir yığına eklenir. Bir sonraki geri hareketini, her geri hareketi için bir geri arama ile işler.
Tahmine dayalı geri hareketi animasyonunu test etme
Android 13 son sürümünden itibaren geçerli olmak üzere Şekil 1'de gösterilen ana sayfaya dönüş animasyonunu test etmek için geliştirici seçeneğini kullanabilirsiniz.
Bu animasyonu test etmek için aşağıdaki adımları tamamlayın:
Cihazınızda Ayarlar > Sistem > Geliştirici seçenekleri.
Tahmine dayalı geri animasyonlar'ı seçin.
Güncellenen uygulamanızı başlatın ve çalışır halde görmek için geri hareketini kullanın.