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 hareketini kullandığınızda Şekil 1'deki örnekte gösterildiği gibi uygulamanızın arkasındaki ana ekranın animasyonlu önizlemesi gösterilebilir.
Android 15'ten itibaren, tahmin edilen geri gitme animasyonları için geliştirici seçeneği artık kullanılamayacak. Tahmin edilen geri gitme hareketini tamamen veya etkinlik düzeyinde etkinleştiren uygulamalarda artık ana sayfaya geri gitme, görevler arası geçiş ve etkinlikler arası geçiş gibi sistem animasyonları gösterilir.
Bu ana sayfaya dönme animasyonunu test edebilirsiniz (bu sayfanın sonraki bölümlerinde açıklandığı gibi).
Tahmin edilen geri gitme hareketini desteklemek için uygulamanızı güncellemeniz, AndroidX Activity 1.6.0 veya sonraki bir API'de geriye dönük uyumlu OnBackPressedCallback 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 doğru şekilde yakalamak için bir taşıma yolu sağlar. Bu yol, KeyEvent.KEYCODE_BACK ve onBackPressed yöntemleri (ör. Activity ve Dialog) içeren tüm sınıflardan gelen geri yakalamaları yeni sistem geri API'leriyle değiştirmeyi içerir.
Codelab ve Google I/O videosu
Bu sayfadaki dokümanları kullanmanın yanı sıra codelab'imizi de deneyebilirsiniz. AndroidX Etkinlik API'lerini kullanarak tahmin edilen geri gitme hareketini işleyen bir WebView'un yaygın kullanım alanı uygulamasını sağlar.
AndroidX ve platform API'lerini uygulamayla ilgili daha fazla örnek içeren Google I/O videomuzu da izleyebilirsiniz.
Compose'da özel geri hareketlerini işleme
Compose, özel geri hareketlerini işlemek için PredictiveBackHandler composable'ını sağlar. Bu API, geri hareketine yanıt vermenizi sağlar ve kullanıcı kaydırdıkça özel animasyonlar veya geçişler uygulamak için kullanabileceğiniz BackEventCompat nesnelerinden oluşan bir Flow sağlar.
PredictiveBackHandler özelliğini kullanmak için uygulamanızın androidx.activity:activity-compose bağımlılığını (1.8.0 veya sonraki bir sürüm) içerdiğinden emin olun:
// In your build.gradle.kts file:
dependencies {
implementation("androidx.activity:activity-compose:1.8.0")
}
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. } }
İlerleme durumunu izlemeden yalnızca geri hareketini yakalamanız gerekiyorsa BackHandler kullanın.
Varsayılan geri gezinmeyi kullanan bir uygulamayı güncelleme
Tahmin edilen geri gitme özelliği varsayılan olarak etkindir.
Uygulamanızda Parçalar veya Gezinme Bileşeni kullanılıyorsa AndroidX Etkinliği 1.6.0 veya sonraki bir sürüme de yükseltin.
Özel geri gezinme kullanan bir uygulamayı güncelleme
Uygulamanız özel geri davranışını uyguluyorsa AndroidX kullanıp kullanmadığına ve geri gezinmeyi nasıl işlediğine bağlı olarak farklı taşıma yolları vardır.
| Uygulamanızın geri gezinmeyi işleme şekli | Ö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 (ve en çok önerilen) kullanım alanıdır. Özel geri gezinme sağlama bölümünde açıklandığı gibi, OnBackPressedDispatcher ile özel hareketle gezinme işleme özelliğini uygulayan yeni veya mevcut uygulamalar için geçerlidir.
OnBackPressedDispatcher kullanan API'lerin (ör. Parçalar ve Gezinme Bileşeni) tahmin edilen geri gitme hareketiyle sorunsuz şekilde çalışması için AndroidX Activity 1.6.0 veya sonraki bir sürüme yükseltin.
// In your build.gradle file:
dependencies {
// Add this in addition to your other dependencies
implementation "androidx.activity:activity:1.6.0"
}
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:
Sistem geri işleme mantığınızı,
OnBackPressedCallbackuygulayarak AndroidX'inOnBackPressedDispatchersınıfına taşıyın. Ayrıntılı talimatlar 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_BACKkullanarak geri etkinliklerini engellemeyi durdurun.AndroidX Activity 1.6.0 veya sonraki bir sürüme 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" }
Tahmin edilen geri gitme özelliğini devre dışı bırakma
Kapsam dışında kalmak için AndroidManifest.xml dosyasındaki <application> etiketinde android:enableOnBackInvokedCallback işaretini false olarak ayarlayın.
<application
...
android:enableOnBackInvokedCallback="false"
... >
...
</application>
Bu ayar "Yanlış" değerine ayarlanırsa:
- Tahmin edilen geri gitme hareketi sistem animasyonunu devre dışı bırakır.
OnBackInvokedCallbackyoksayılır ancakOnBackPressedCallbackçağrıları ç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ış, birden fazla etkinliğe sahip büyük uygulamaların tahmin edilen geri gitme hareketlerine geçişini daha kolay yönetilebilir hale getirir.
Aşağıdaki kodda, MainActivity öğesinden ana sayfaya dönme sistem animasyonunu etkinleştirmek için enableOnBackInvokedCallback ayarının nasıl yapıldığı 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 nerede ayarladığınıza bağlı olarak etkinlik düzeyinde veya uygulama düzeyinde tahmin edilen geri gitme animasyonlarını devre dışı bırakır ve sistemeOnBackInvokedCallbackplatform API'sine yapılan çağrıları yoksayma talimatı verir. AncakOnBackPressedCallbackçağrıları çalışmaya devam eder. Bunun nedeni,OnBackPressedCallbackyönteminin geriye dönük uyumlu olması ve Android 13'ten önceki sürümlerde desteklenmeyenonBackPressedAPI'sini çağırmasıdır.enableOnBackInvokedCallbackişaretini uygulama düzeyinde ayarlamak, uygulamadaki tüm etkinlikler için varsayılan değeri belirler. Yukarıdaki kod örneğinde gösterildiği gibi, işareti etkinlik düzeyinde ayarlayarak her etkinlik için varsayılan değeri geçersiz kılabilirsiniz.
Geri arama yönergeleri
Desteklenen sistem geri çağırmalarını kullanırken şu yönergeleri uygulayın:
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 belirleme
Kullanıcı arayüzü durumu, kullanıcı arayüzünü açıklayan bir özelliktir. Aşağıdaki genel adımları uygulamanızı öneririz.
Her bir geri çağırmayı etkinleştiren ve devre dışı bırakan kullanıcı arayüzü durumunu belirleyin.
StateFlowveya Compose State gibi 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 mantığını koşullu ifadelerle ilişkilendiriyorsa bu, geri etkinliğine gerçekleştikten sonra tepki verdiğiniz anlamına gelebilir. Daha yeni geri çağırmalarda bu kalıbı kullanmayın. Mümkünse geri çağırmayı koşullu ifadenin dışına taşıyın ve bunun yerine geri çağırmayı gözlemlenebilir veriler tutucu türüyle ilişkilendirin.
Kullanıcı arayüzü mantığı için sistem geri çağırma işlevlerini kullanma
Kullanıcı arayüzü mantığı, kullanıcı arayüzünün nasıl gösterileceğini belirler. İletişim kutusu gösterme veya animasyon çalıştırma gibi kullanıcı arayüzü mantığını çalıştırmak için sistem geri çağırma işlevlerini kullanın.
Uygulamanız PRIORITY_DEFAULT veya PRIORITY_OVERLAY ile OnBackPressedCallback ya da OnBackInvokedCallback etkinleştiriyorsa tahmin edilen geri gitme animasyonları çalışmaz ve geri gitme etkinliğini sizin işlemeniz gerekir. İş mantığını çalıştırmak veya günlük kaydı yapmak için bu geri çağırmaları oluşturmayın.
Uygulamanızın, kullanıcı geri kaydırdığında iş mantığını veya günlüğü çalıştırması gerekiyorsa aşağıdaki yaklaşımları kullanın:
- Oluşturma'da: Oluşturma hedefiyle ilişkili bir
ViewModelöğesininonCleared()geri çağırma işlevinde günlüğe kaydedin. Bu, bir Compose hedefinin eski yığından çıkarılıp silindiğini anlamanın en iyi yoludur. - Android 16 ve sonraki sürümlerde:
OnBackInvokedCallbacköğesiniPRIORITY_SYSTEM_NAVIGATION_OBSERVERile kullanın. Bu işlem, geri etkinliğini kullanmayan bir gözlemci geri çağırma işlevi oluşturur. Örneğin, kullanıcı kök etkinlikten geri kaydırdığında (uygulamanızdan ayrıldığında) geri etkinliğini kaydetmek veya ana sayfaya dönme animasyonunun oynatılmasına izin verirken iş mantığını çalıştırmak için bu geri çağırmayı kaydedebilirsiniz. - Görünüm tabanlı uygulamalarda: Geri etkinliklerini kullanmak yerine yaşam döngüsü veya eski yığın geri çağırmaları içinde günlük kaydı yapın:
- Aktivite geçişleri için
Activity.onDestroy()içindeisFinishingdeğerinintrueolup olmadığını kontrol edin. - Parça geçişleri için, parça görünümü yaşam döngüsü
onDestroy()içindeisRemovingdeğerinintrueolup olmadığını kontrol edin veyaFragmentManager.OnBackStackChangedListener(onBackStackChangeStarted/onBackStackChangeCommitted) kullanın.
- Aktivite geçişleri için
Tek sorumluluk geri çağırmaları oluşturma
Dağıtıcıya birden fazla geri çağırma ekleyebilirsiniz. Geri çağırmalar bir yığına eklenir. Bu yığında, etkinleştirilen son geri çağırma, her geri hareketi için bir geri çağırma olacak şekilde bir sonraki geri hareketini işler.
Tek bir sorumluluğu olan geri çağırmaların etkinleştirme durumunu yönetmek daha kolaydır. Örneğin:
Şekil 2'de, yığında her biri bir işlemden sorumlu olan birden fazla geri çağırma işlevinin nasıl bulunabileceği gösterilmektedir. Compose'da geri çağırmalar en içteki bileşenden en dıştakine doğru değerlendirilir ve bir geri çağırma yalnızca yığındaki önceki geri çağırmalar devre dışı bırakılmışsa çalışır:
- "Emin misiniz?"
PredictiveBackHandler, kullanıcı bir forma veri girdiğinde etkinleştirilir, aksi takdirde devre dışı bırakılır. Etkinleştirildiğinde, geri hareketini keserek onay iletişim kutusu veya özel uygulama içi animasyon gösterir. - Önceki geri çağırma devre dışı bırakılırsa ekran düzeyindeki
BackHandlerçalışır. Bu örnekte, devre dışı bırakılmıştır. NavHostgeri çağırma işlevi, önceki özel geri çağırma işlevleri devre dışı bırakılmışsa eski yığındaki pop hedeflerine geri gezinmeyi yönetir.- Son olarak, önceki tüm geri çağırmalar devre dışı bırakılırsa sistem geri hareketini işler. Eski yığın, kök hedefindeyken sistem; ana sayfaya geri dönme, etkinlikler arası geçiş ve görevler arası geçiş gibi sistem düzeyinde animasyonları tetikler.
Aynı yığın davranışı, görünüme dayalı uygulamalar için de geçerlidir: Son eklenen etkin OnBackPressedCallback önceliklidir, ardından FragmentManager ve son olarak sistemin geri işleme özelliği kullanılır.
Tahmin edilen geri gitme hareketi animasyonunu test etme
Android 15'ten itibaren, tahmine dayalı geri gezinmeyi destekleyen uygulamalarda ana sayfaya geri dönme, görevler arası geçiş ve etkinlikler arası geçiş gibi sistem animasyonları varsayılan olarak etkinleştirilir. Bu özellikler artık geliştirici seçeneği olarak sunulmuyor.
Android 13 veya Android 14 çalıştıran cihazlarda, Şekil 1'de gösterilen ana ekrana dönme animasyonunu test etmek için geliştirici seçeneğini etkinleştirebilirsiniz:
Cihazınızda Ayarlar > Sistem > Geliştirici seçenekleri'ne gidin.
Tahmin edilen geri gitme animasyonları'nı seçin.
Güncellenen uygulamanızı başlatın ve geri hareketini kullanarak nasıl çalıştığını görün.