Tahmin edilen geri gitme, bir hareketle gezinme özelliğidir. Kullanıcılar bu özellik sayesinde geri kaydırma hareketinin kendilerini nereye götüreceğini önizleyebilir.
Örneğin, geri hareketi kullanıldığında, 1. şekildeki makette gösterildiği gibi, uygulamanızın arkasındaki ana ekranın animasyonlu bir önizlemesi gösterilebilir.
Android 15'ten itibaren, tahmin edilen geri gitme animasyonları için geliştirici seçeneği kullanılamayacak. Ana sayfaya geri gitme, görevler arası geçiş ve etkinlikler arası geçiş gibi sistem animasyonları artık tahmin edilen geri gitme hareketini tamamen veya etkinlik düzeyinde etkinleştiren uygulamalarda gösteriliyor.
Bu ana ekrana dönüş animasyonunu test edebilirsiniz (bu sayfanın sonraki bölümünde açıklandığı gibi).
Tahmini geri gitme hareketini desteklemek için uygulamanızı güncellemeniz, geriye dönük uyumlu OnBackPressedCallback AppCompat 1.6.0-alpha05 (AndroidX) veya daha yüksek bir API'yi ya da yeni OnBackInvokedCallback platform API'sini kullanmanız gerekir. Çoğu uygulama, geriye dönük uyumlu AndroidX API'yi kullanır.
Bu güncelleme, geri gezinmeyi düzgün şekilde yakalamak için bir taşıma yolu sağlar. Bu işlem, KeyEvent.KEYCODE_BACK'den gelen geri yakalamaların ve Activity ile Dialog gibi onBackPressed yöntemlerine sahip tüm sınıfların yeni sistem Geri API'leriyle değiştirilmesini içerir.
Codelab ve Google I/O videosu
Bu sayfadaki dokümanları kullanmanın yanı sıra codelab'imizi de deneyin. AndroidX Activity API'lerini kullanarak tahmin edilen geri gitme hareketini işleyen bir WebView'ın yaygın kullanım alanı uygulamasını sağlar.
AndroidX ve platform API'lerini uygulama ile ilgili ek örnekler içeren Google I/O videomuzu da izleyebilirsiniz.
Oluşturma'da özel geri gitme hareketlerini işleme
Compose, özel geri hareketleri işlemek için PredictiveBackHandler composable'ı sağlar. Bu API, geri hareketine yanıt vermenize olanak tanır ve kullanıcı kaydırdıkça özel animasyonlar veya geçişler uygulamak için kullanabileceğiniz Flow BackEventCompat nesneleri sağlar.
PredictiveBackHandler(enabled = isBackHandlerEnabled) { progress: Flow<BackEventCompat> ->
try {
progress.collect { backEvent ->
// Update your UI or animation based on backEvent.progress
}
// Handle the final back action (e.g., navigate back)
} catch (e: CancellationException) {
// Back gesture was cancelled, reset your UI
}
}
Yalnızca ilerleme durumunu izlemeden geri hareketini durdurmanız gerekiyorsa BackHandler kullanın.
Varsayılan geri gezinme özelliğini kullanan bir uygulamayı güncelleme
Tahmin edilen geri gitme özelliği varsayılan olarak etkindir.
Uygulamanızda Fragment'ler veya Navigation Component kullanılıyorsa AndroidX Activity 1.6.0-alpha05 ya da sonraki bir sürüme de yükseltin.
Özel geri gezinme kullanan bir uygulamayı güncelleme
Uygulamanızda özel geri davranışı uygulanıyorsa AndroidX'in kullanılıp kullanılmadığına ve geri gezinmenin nasıl işlendiğine bağlı olarak farklı taşıma yolları vardır.
| Uygulamanızda geri gezinme nasıl işleniyor? | Önerilen taşıma yolu (bu sayfadaki bağlantı) |
| AndroidX API'leri | Mevcut bir AndroidX geri gitme uygulamasını taşıma |
| Desteklenmeyen platform API'leri | Desteklenmeyen geri gezinme API'leri içeren bir AndroidX uygulamasını AndroidX API'lerine taşıma |
AndroidX geri gezinme uygulamasını taşıma
Bu kullanım alanı en yaygın olanıdır (ve en çok önerilenidir). OnBackPressedDispatcher ile özel hareketle gezinme işleme uygulayan yeni veya mevcut uygulamalar için geçerlidir. Bu uygulamalar, Özel geri gezinme sağlama bölümünde açıklanmıştır.
OnBackPressedDispatcher kullanan API'lerin (ör. Fragments ve Navigation Component) tahmin edilen geri gitme hareketiyle sorunsuz bir şekilde çalışmasını sağlamak için AndroidX Activity 1.6.0-alpha05 sürümüne yükseltin.
```xml
// In your build.gradle file:
dependencies {
// Add this in addition to your other dependencies
implementation "androidx.activity:activity:1.6.0-alpha05"
```
Desteklenmeyen geri gezinme API'leri içeren bir AndroidX uygulamasını AndroidX API'lerine taşıma
Uygulamanız AndroidX kitaplıklarını kullanıyor ancak desteklenmeyen geri gezinme API'lerini uyguluyor veya bunlara referans veriyorsa yeni davranışı desteklemek için AndroidX API'lerini kullanmaya geçmeniz gerekir.
Desteklenmeyen API'leri AndroidX API'lerine taşımak için:
Sisteminizin geri işleme mantığını,
OnBackPressedDispatcherileOnBackPressedCallbackuygulaması kullanarak AndroidX'e taşıyın. Ayrıntılı bilgi için Özel geri gezinme sağlama başlıklı makaleyi inceleyin.Geri hareketini yakalamayı durdurmaya hazır olduğunuzda
OnBackPressedCallbacközelliğini devre dışı bırakın.OnBackPressedveyaKeyEvent.KEYCODE_BACKaracılığıyla geri etkinliklerin yakalanmasını durdurun.AndroidX Activity 1.6.0-alpha05 sürümüne yükselttiğinizden emin olun.
// In your build.gradle file: dependencies { // Add this in addition to your other dependencies implementation "androidx.activity:activity:1.6.0-alpha05"
Tahmin edilen geri gitme özelliğini devre dışı bırakma
Bu özelliği devre dışı bırakmak için AndroidManifest.xml bölümündeki <application> etiketinde android:enableOnBackInvokedCallback bayrağını false olarak ayarlayın.
<application
...
android:enableOnBackInvokedCallback="false"
... >
...
</application>
Bu ayarın "Yanlış" olarak ayarlanması durumunda aşağıdakiler gerçekleşir:
- Tahmin edilen geri gitme hareketi sistem animasyonunu devre dışı bırakır.
OnBackInvokedCallbackyoksayılır ancakOnBackPressedCallbackaramaları çalışmaya devam eder.
Etkinlik düzeyinde devre dışı bırakma
android:enableOnBackInvokedCallback işareti, etkinlik düzeyinde tahmine dayalı sistem animasyonlarını devre dışı bırakmanıza olanak tanır. Bu davranış, büyük ve çok etkinlikli uygulamaların tahmine dayalı geri hareketlere geçişini daha kolay yönetilebilir hale getirir.
Aşağıdaki kodda, enableOnBackInvokedCallback özelliğinin MainActivity konumundan ana ekrana dönüş sistem animasyonunu etkinleştirecek şekilde ayarlanması örneği gösterilmektedir:
<manifest ...>
<application . . .
android:enableOnBackInvokedCallback="false">
<activity
android:name=".MainActivity"
android:enableOnBackInvokedCallback="true"
...
</activity>
<activity
android:name=".SecondActivity"
android:enableOnBackInvokedCallback="false"
...
</activity>
</application>
</manifest>
android:enableOnBackInvokedCallback işaretini kullanırken aşağıdaki hususları göz önünde bulundurun:
android:enableOnBackInvokedCallback=falseayarı, etiketi nereye ayarladığınıza bağlı olarak tahmini geri animasyonlarını etkinlik düzeyinde veya uygulama düzeyinde devre dışı bırakır ve sistemeOnBackInvokedCallbackplatform API'sine yapılan çağrıları yoksaymasını söyler. AncakOnBackPressedCallbackgeriye dönük uyumlu olduğundan ve Android 13'ten önceki sürümlerde desteklenmeyenonBackPressedAPI'sini çağırdığındanOnBackPressedCallbackçağrıları çalışmaya devam eder.enableOnBackInvokedCallbackişaretini uygulama düzeyinde ayarlamak, uygulamadaki tüm etkinlikler için varsayılan değeri belirler. İşareti etkinlik düzeyinde ayarlayarak varsayılan değeri etkinlik başına geçersiz kılabilirsiniz. Bu işlem, önceki kod örneğinde gösterilmiştir.
Geri arama ile ilgili en iyi uygulamalar
Desteklenen sistem geri çağırmalarını kullanmayla ilgili en iyi uygulamaları aşağıda bulabilirsiniz:
PredictiveBackHandler veya BackHandler (Compose için),
OnBackPressedCallback veya OnBackInvokedCallback.
Her geri çağırmayı etkinleştiren ve devre dışı bırakan kullanıcı arayüzü durumunu belirleyin.
Kullanıcı arayüzü durumu, kullanıcı arayüzünü tanımlayan bir özelliktir. Aşağıdaki genel adımları uygulamanızı öneririz.
Her geri çağırmayı etkinleştiren ve devre dışı bırakan kullanıcı arayüzü durumunu belirleyin.
StateFlowveya Compose State gibi bir gözlemlenebilir veri tutucu türü kullanarak bu durumu tanımlayın ve durum değiştikçe geri çağırmayı etkinleştirin veya devre dışı bırakın.
Uygulamanız daha önce geri gitme mantığını koşullu ifadelerle ilişkilendiriyorsa bu durum, geri gitme etkinliğine zaten gerçekleşmişken tepki verdiğinizi gösterebilir. Daha yeni geri çağırmalarla bu desenden kaçının. Mümkünse geri çağırmayı koşullu ifadenin dışına taşıyın ve bunun yerine geri çağırmayı gözlemlenebilir bir veri tutucu türüyle ilişkilendirin.
Kullanıcı arayüzü mantığı için sistem geri çağırmalarını kullanma
Kullanıcı arayüzü mantığı, kullanıcı arayüzünün nasıl görüntüleneceğini belirler. Kullanıcı arayüzü mantığını çalıştırmak için sistem geri çağırma işlevlerini kullanın (ör. iletişim kutusu gösterme veya animasyon çalıştırma).
Uygulamanız OnBackPressedCallback veya OnBackInvokedCallback ile PRIORITY_DEFAULT ya da PRIORITY_OVERLAY'ü etkinleştiriyorsa tahmin edilen geri gitme animasyonları çalışmaz ve geri gitme etkinliğini işlemeniz gerekir. İşletme mantığını çalıştırmak veya günlük kaydı oluşturmak için bu geri çağırmaları oluşturmayın.
Uygulamanız, kullanıcı geri kaydırdığında işletme mantığı çalıştırmalı veya günlük kaydı oluşturmalıysa aşağıdaki yaklaşımları kullanın:
- Android 16 ve sonraki sürümlerin yüklü olduğu cihazlarda
PRIORITY_SYSTEM_NAVIGATION_OBSERVERileOnBackInvokedCallbacksimgesini kullanın. Bu, geri etkinliğini kullanmayan bir gözlemci geri araması oluşturur. Örneğin, kullanıcı kök etkinlikten geri kaydırdığında veya başka bir deyişle uygulamanızdan ayrıldığında bu geri çağırmayı kaydedebilirsiniz. Bu durumda, geri etkinliğini günlüğe kaydedebilir veya başka bir iş mantığı çalıştırabilirsiniz. Ana sayfaya dönüş animasyonu yine de oynatılır. - Etkinlikten etkinliğe veya parçadan etkinliğe geçiş durumlarında,
isFinishingiçindeonDestroy, Etkinlik yaşam döngüsü içindetrueise günlüğe kaydedin. - Parçadan parçaya geçiş yapılan durumlarda, Parça'nın görünüm yaşam döngüsünde
onDestroyiçindekiisRemovingdoğruysa günlüğe kaydedin. Alternatif olarak,FragmentManager.OnBackStackChangedListeneriçindekionBackStackChangeStartedveyaonBackStackChangeCommittedyöntemlerini kullanarak da giriş yapabilirsiniz. - Oluşturma durumu için, Oluşturma hedefiyle ilişkilendirilmiş bir
ViewModelöğesininonCleared()geri çağırma işlevi içinde günlük kaydı oluşturun. Bu, bir oluşturma hedefinin eski yığından çıkarılıp kaldırıldığını anlamak için en iyi sinyaldir.
Tek sorumluluk geri çağırmaları oluşturma
Gönderene birden fazla geri çağırma ekleyebilirsiniz. Geri çağırmalar, son eklenen etkin geri çağırmanın bir sonraki geri hareketini geri hareket başına bir geri çağırma ile işlediği bir yığına eklenir.
Geri arama tek bir sorumluluğa sahipse etkinleştirilmiş durumunu yönetmek daha kolaydır. Örneğin:
Şekil 2'de, yığında her biri tek bir şeyden sorumlu olan birden fazla geri çağırma işlevi bulunabileceği gösterilmektedir. Geri çağırma yalnızca yığında kendisinden önce gelen geri çağırmalar devre dışı bırakılmışsa çalışır. Bu örnekte, kullanıcı bir forma veri girdiğinde "Emin misiniz?" geri çağırma işlevi etkinleştirilir, aksi takdirde devre dışı bırakılır. Geri çağırma, kullanıcı formu kapatmak için geri kaydırdığında bir onay iletişim kutusu açar.
Diğer geri çağırma, tahmini geri özelliğini destekleyen bir materyal bileşeni, Progress API'lerini kullanan bir AndroidX geçişi veya başka bir özel geri çağırma içerebilir.
Aynı yığın davranışı Compose'da da geçerlidir: En içteki PredictiveBackHandler veya BackHandler önceliklidir.
Benzer şekilde, yukarıdaki geri çağırmalar devre dışı bırakılmışsa ve bu FragmentManager için geri yığın boş değilse childFragmentManager geri çağırması çalışır. Bu örnekte, bu dahili geri çağırma devre dışı bırakılmıştır.
Benzer şekilde, yukarıdaki geri çağırmalar devre dışı bırakılırsa ve yığını boş değilse supportFragmentManager'nın dahili geri çağırması çalışır. Bu örnekte, kullanıcı forma metin girmediği için bu geri çağırma çalışır ve "Emin misiniz?" geri çağırması devre dışı bırakılır.
Son olarak, yukarıdaki geri çağırmalar devre dışı bırakılırsa sistem geri hareketini işler. Ana sayfaya geri dönme, etkinlikler arası geçiş ve görevler arası geçiş gibi sistem animasyonlarını tetiklemek için supportFragmentManager'nın geri yığını boş olmalı, böylece dahili geri çağırma işlevi devre dışı bırakılmalıdır.
Tahmin edilen geri gitme hareketi animasyonunu test etme
Hâlâ Android 13 veya Android 14 kullanıyorsanız Şekil 1'de gösterilen ana ekrana dönüş animasyonunu test edebilirsiniz.
Bu animasyonu test etmek için aşağıdaki adımları tamamlayın:
Cihazınızda Ayarlar > Sistem > Geliştirici seçenekleri'ne gidin.
Tahmine dayalı geri hareketi animasyonları'nı seçin.
Güncellenen uygulamanızı başlatın ve geri hareketini kullanarak nasıl çalıştığını görün.