
Hareketle gezinme özelliği olan Tahmini Geri, kullanıcıların geri kaydırma hareketinin onları nereye götüreceğini önizlemelerine olanak tanır.
Ö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 15'ten itibaren, tahmini geri animasyonlar için geliştirici seçeneği artık kullanılamıyor. Ana sayfaya geri gitme, görevler arasında geçiş yapma ve etkinlikler arasında geçiş yapma gibi sistem animasyonları artık tahmini geri gitme hareketini tamamen veya etkinlik düzeyinde etkinleştiren uygulamalarda gösteriliyor.
Bu ana sayfaya dönme animasyonunu test edebilirsiniz (bu sayfanın sonraki bir bölümünde açıklandığı gibi).
Tahmini geri hareketi desteklemek için uygulamanızı, geriye dönük uyumlu OnBackPressedCallback
AppCompat 1.6.0-alpha05 (AndroidX) veya daha yeni bir API'yi ya da yeni OnBackInvokedCallback
platform API'sini kullanarak güncellemeniz gerekir. Çoğu uygulama, geriye dönük uyumlu AndroidX API'yi kullanır.
Bu güncelleme, geri gezinmeyi düzgün şekilde durdurmak için bir taşıma yolu sağlar. Bu yol, KeyEvent.KEYCODE_BACK
'daki geri müdahaleleri ve Activity
ve Dialog
gibi onBackPressed
yöntemlerine sahip tüm sınıfları yeni sistem geri API'leriyle değiştirmeyi içerir.
Codelab ve Google I/O videosu
Bu sayfada bulunan dokümanları kullanmanı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 örneklerin yer aldığı Google I/O videomuzu da izleyebilirsiniz.
Varsayılan geri gezinme özelliğini kullanan bir uygulamayı güncelleme
Tahmini geri sarma özelliği varsayılan olarak etkindir.
Uygulamanız Fragment veya Gezinme Bileşeni kullanıyorsa AndroidX Etkinliği 1.6.0-alpha05 veya sonraki bir sürüme de yükseltme yapın.
Özel geri gezinme kullanan bir uygulamayı güncelleme
Uygulamanız özel geri davranışı uyguluyorsa AndroidX'i kullanıp kullanmadığına ve geri gezinmeyi nasıl işlediğine bağlı olarak farklı taşıma yolları vardır.
Uygulamanız AndroidX kullanıyorsa | Uygulamanızın geri navigasyonu işleme şekli | Ö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şınabilir | Desteklenmeyen geri gezinme API'lerini kullanan bir uygulamayı platform API'lerine taşıma |
Desteklenmeyen platform API'leri ancak taşıma yapılamıyor | Uygulamanızın AndroidManifest.xml dosyasının <application> veya <activity> etiketinde android:enableOnBackInvokedCallback özelliğini false olarak ayarlayarak özelliği geçici olarak devre dışı bırakın. |
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 hareket gezinme işlevi uygulayan yeni veya mevcut uygulamalar için geçerlidir.
Halihazırda OnBackPressedDispatcher
kullanan API'lerin (ör. Fragment'ler ve Gezinme Bileşeni) tahmini geri hareketiyle sorunsuz bir şekilde çalıştığından emin olmak 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ıyorsa ancak desteklenmeyen geri gezinme API'lerini uyguluyorsa veya referans veriyorsa yeni davranışı desteklemek için AndroidX API'lerini kullanmaya geçmeniz gerekir.
Desteklenmeyen API'leri AndroidX API'lerine taşımak için:
OnBackPressedCallback
uygulamasını kullanarak sistem geri işleme mantığınızı AndroidX'inOnBackPressedDispatcher
sürümüne taşıyın. Ayrıntılı bilgi için Özel geri gezinme sağlama başlıklı makaleyi inceleyin.Geri hareketini engellemeyi durdurmaya hazır olduğunuzda
OnBackPressedCallback
seçeneğini devre dışı bırakın.OnBackPressed
veyaKeyEvent.KEYCODE_BACK
aracılığıyla geri etkinliklerini durdurun.AndroidX Activity 1.6.0-alpha05 sürümüne geçtiğ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"
Desteklenmeyen geri gezinme API'lerini kullanan bir uygulamayı platform API'lerine taşıma
Uygulamanız AndroidX kitaplıklarını kullanamıyorsa ve bunun yerine desteklenmeyen API'leri kullanarak özel Geri gezinme özelliğini uyguluyorsa veya bu özelliğe referans veriyorsa OnBackInvokedCallback
platform API'sine geçmeniz gerekir.
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.Özel geri mantığınızı
OnBackInvokedCallback
'eonBackInvokedDispatcher
ile kaydedin. Bu işlem, mevcut etkinliğin tamamlanmasını engeller ve kullanıcı sistemde Geri gezinmeyi tamamladığında geri çağırma işleviniz Geri işlemine yanıt verme şansı elde eder.Geri hareketini durdurmaya hazır olduğunuzda
OnBackInvokedCallback
için kayıt silme işlemini yapın. 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ı 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) */ } ); } }
Android 13 ve sonraki sürümlerde
OnBackPressed
veyaKeyEvent.KEYCODE_BACK
kullanarak geri etkinliklerini durdurmayı bırakın.
Benzer AndroidX OnBackPressedCallback
'ta kullanılamayan OnBackInvokedCallback
'leri PRIORITY_DEFAULT
veya PRIORITY_OVERLAY
ile kaydedebilirsiniz. PRIORITY_OVERLAY
ile geri arama kaydetme bazı durumlarda faydalı olabilir.
Bu durum, onKeyPreIme()
'ten geçiş yaptığınızda ve geri çağırma işlevinizin açık bir IME yerine geri hareketini alması gerektiğinde geçerlidir. IME'ler açıldığında PRIORITY_DEFAULT
ile geri çağırma işlevini kaydeder. OnBackInvokedDispatcher
'un geri hareketini açık IME yerine geri çağırma işlevinize göndermesini sağlamak için geri çağırma işlevinizi PRIORITY_OVERLAY
ile kaydedin.
Tahmin edilen geri gitme özelliğini devre dışı bırakma
Özelliği devre dışı bırakmak için AndroidManifest.xml
'teki <application>
etiketinde android:enableOnBackInvokedCallback
işaretini false
olarak ayarlayın.
<application
...
android:enableOnBackInvokedCallback="false"
... >
...
</application>
Bu özelliğin değeri "Yanlış" olarak ayarlandığında aşağıdakiler gerçekleşir:
- Tahmine dayalı geri hareketi sistem animasyonunu devre dışı bırakır.
OnBackInvokedCallback
çağrıları yoksayılır ancakOnBackPressedCallback
çağrıları çalışmaya devam eder.
Etkinlik düzeyinde devre dışı bırakma
Android 16'dan itibaren android:enableOnBackInvokedCallback
işaretçisi, tahmini sistem animasyonları için etkinlik düzeyinde devre dışı bırakma seçeneği sunar. Bu davranış, çok sayıda etkinliği olan büyük uygulamaları tahmini geri hareketlere taşımayı daha kolay hale getirir.
Aşağıdaki kodda, MainActivity
öğesinden ana ekrana dönme sistemi animasyonunu etkinleştirmek için ayarlanmış enableOnBackInvokedCallback
ö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=false
ayarı, etiketi ayarlamanıza bağlı olarak tahmini geri animasyonlarını etkinlik düzeyinde veya uygulama düzeyinde devre dışı bırakır ve sistemeOnBackInvokedCallback
platform API'sine yapılan çağrıları yoksaymasını söyler. AncakOnBackPressedCallback
geriye dönük uyumlu olduğu ve Android 13'ten önce desteklenmeyenonBackPressed
API'yi çağırdığı içinOnBackPressedCallback
çağrıları çalışmaya devam eder.enableOnBackInvokedCallback
işaretçisi uygulama düzeyinde ayarlandığında uygulamadaki tüm etkinlikler için varsayılan değer belirlenir. Önceki kod örneğinde gösterildiği gibi işaretçiyi etkinlik düzeyinde ayarlayarak etkinlik başına varsayılan değeri geçersiz kılabilirsiniz.
Geri aramayla ilgili en iyi uygulamalar
Desteklenen sistem geri aramalarını (BackHandler
(Oluştur için), OnBackPressedCallback
veya OnBackInvokedCallback
) kullanmayla ilgili en iyi uygulamaları aşağıda bulabilirsiniz.
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.
StateFlow
veya Compose State gibi bir gözlenebilir veri tutucu türü kullanarak bu durumu tanımlayın ve durum değiştikçe geri çağırma işlevini etkinleştirin veya devre dışı bırakın.
Uygulamanız daha önce geri mantığını koşullu ifadelerle ilişkilendiriyorsa bu, geri etkinliğine zaten gerçekleştikten sonra tepki verdiğinizi gösterebilir. Yeni geri çağırmalarda bu kalıptan kaçının. Mümkünse geri aramayı koşullu ifadenin dışına taşıyın ve bunun yerine geri aramayı gözlemlenebilir bir veri tutucu türüyle ilişkilendirin.
Kullanıcı arayüzü mantığı için sistem geri geri çağırma işlevlerini kullanma
Kullanıcı arayüzü mantığı, kullanıcı arayüzünün nasıl gösterileceğini belirler. 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 geri çağırma işlevini etkinleştirirse tahmini animasyonlar çalışmaz ve geri etkinliğini işlemeniz gerekir. Yalnızca kullanıcı arayüzü olmayan mantık çalıştırmak için geri çağırma işlevi oluşturmayın.
Ö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 günlüğe kaydedin.
- Etkinlikten etkinliğe veya parçadan etkinliğe geçiş durumları için
onDestroy
içindekiisFinishing
'ün etkinlik yaşam döngüsü içindetrue
olup olmadığını günlüğe kaydedin. - Parçadan parçaya durumlarda,
onDestroy
içindeisRemoving
ifadesinin parçanın görüntüleme yaşam döngüsü içinde doğru olup olmadığını günlüğe kaydedin. Alternatif olarak,FragmentManager.OnBackStackChangedListener
içindeonBackStackChangeStarted
veyaonBackStackChangeCommitted
yöntemlerini kullanarak giriş yapabilirsiniz.
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, bir oluşturma hedefinin arka yığıntan ne zaman kaldırıldığını ve yok edildiğini öğrenmek için en iyi sinyaldir.
Tek sorumluluk çağrısı oluşturma
Yöneticiye birden fazla geri çağırma işlevi ekleyebilirsiniz. Geri çağırma işlevleri, son eklenen etkin geri çağırma işlevinin bir sonraki geri hareketini her geri hareket için bir geri çağırma işleviyle işlediği bir yığına eklenir.
Tek bir sorumluluğu olan geri aramaların etkin durumunu yönetmek daha kolaydır. Örneğin:

Şekil 2'de, yığınta her biri bir şeyden sorumlu olan birden fazla geri çağırma işlevi olabileceği gösterilmektedir. Geri çağırma yalnızca yığıntaki üstündeki geri çağırmalar devre dışıysa çalışır. Bu örnekte, "Emin misiniz?" geri çağırma işlevi, kullanıcı bir forma veri girdiğinde etkinleştirilir ve aksi takdirde devre dışı bırakılır. Kullanıcı formu kapatmak için geri kaydırdığında geri arama, bir onay iletişim kutusu açar.
Diğer geri çağırma, tahmini geri çağırmayı destekleyen bir Material bileşeni, Progress API'lerini kullanan bir AndroidX geçişi veya başka bir özel geri çağırma içerebilir.
Yukarıdaki geri çağırmalar devre dışıysa ve childFragmentManager
bir Fragment'e eklenmişse bu FragmentManager
için geri yığın boş değilse childFragmentManager
'nin 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 dahili geri çağırması çalışır. NavigationComponent
, FragmentManager
'e dayandığı için bu davranış, gezinme için FragmentManager
veya NavigationComponent
kullanıldığında tutarlıdır. Bu örnekte, kullanıcı forma metin girmezse "Emin misiniz?" geri çağırma işlevinin devre dışı bırakılmasına neden olan bu geri çağırma işlevi çalıştırılır.
Son olarak, super.onBackPressed()
, yukarıdaki geri çağırmalar devre dışı bırakılırsa tekrar çalışan sistem düzeyinde geri çağırma işlevidir. Ana sayfaya geri dönme, etkinlik ve görevler arası geçiş gibi sistem animasyonlarını tetiklemek için supportFragmentManager
'ın geri yığınının boş olması gerekir. Böylece, dahili geri çağırma işlevi devre dışı bırakılır.
Tahmine dayalı geri 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ı uygulayı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 uygulamanın nasıl çalıştığını görün.