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 hareketi kullanarak uygulamanızın arkasındaki ana ekranın animasyonlu bir önizlemesini gösterebilirsiniz (Şekil 1'deki taslakta gösterildiği gibi). 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. AndroidX Activity API'lerini kullanarak tahmini geri hareketini işleyen bir WebView'in ortak kullanım alanı uygulamasını sağlar.
AndroidX ve platform API'lerinin uygulanmasıyla ilgili ek örnekler içeren Google I/O videomuzu da izleyebilirsiniz.
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 arka uç 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 |
Desteklenmeyen platform API'leri ancak taşıma yapılamıyor | Bu özellik zorunlu hale gelene kadar etkinleştirmeyi erteleme |
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, Android 12 veya önceki sürümleri çalıştıran cihazlarda ise desteklenmeyen API'leri kullanın.OnBackInvokedCallback
içindeki özel geri mantığınızı şununla kaydedin:onBackInvokedDispatcher
. Bu işlem, mevcut etkinliğin tamamlanmasını engeller ve kullanıcı sistemde geri tuşuna basarak geri gittiğinde geri çağırma işleviniz geri işlemine yanıt verme şansı elde eder.Müdahaleyi durdurmaya hazır olduğunuzda
OnBackInvokedCallback
öğesinin kaydını silin geri hareketi. Aksi takdirde, kullanıcılar sistem geri düğmesini kullanırken istenmeyen davranışlarla karşılaşabilir (ör. görünümler arasında "takılıp kalma" ve uygulamanızı kapatmaya zorlanmak).Mantığın
onBackPressed
'ten nasıl taşınacağına dair bir örnek aşağıda 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 durumun geçerli olabileceği bir örnek, onKeyPreIme()
'ten geçiş yaptığınızda geri çağırma işlevinizin açık bir IME yerine geri hareketini alması gerektiği durumdur. IME'ler, açıldığında PRIORITY_DEFAULT
ile geri çağırma işlevini 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>
Önceki örnekte, ".SecondActivity"
için android:enableOnBackInvokedCallback=true
ayarını yapmak etkinlik 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ım.
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. Kullanıcı arayüzü mantığını çalıştırmak için sistem geri geri çağırma işlevlerini kullanın (ör. pop-up görüntüleme veya 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, geri etkinliklerini yalnızca günlüğe kaydetmek için durduruyorsanız bunun yerine Activity veya Fragment yaşam döngüsü içinde kaydedin.
- 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ştur işlemi için, Oluştur hedefiyle ilişkili bir ViewModel
öğesinin onCleared()
geri çağırma işlevinde günlük kaydı oluşturun. Bu, en iyi performansı gösteren
Bir oluşturma hedefi arka yığından çıkarılıp kaldırıldığında.
Tek sorumluluk çağrısı oluşturma
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 geri hareketini kullanarak uygulamanın nasıl çalıştığını görün.