Android 14 (API düzeyi 34), özel animasyonlar oluşturmak için ek sistem animasyonları ve API'ler için destek sağlar. Daha fazla bilgi için Yerleşik ve özel tahmine dayalı geri animasyonları için destek ekleme bölümüne bakın.
Örneğin, bir geri hareketi kullandığınızda, Şekil 1'deki örnekte gösterildiği gibi, uygulamanızın arkasındaki Ana ekranın animasyonlu bir önizlemesi görüntülenebilir. Android 13'ten itibaren bir geliştirici seçeneğini etkinleştirerek (bu sayfada açıklandığı gibi) bu ana sayfaya dönüş animasyonunu test edebilirsiniz.
Tahmine dayalı geri hareketini desteklemek için uygulamanızı güncellemeniz gerekir. Bunun için geriye dönük uyumlu OnBackPressedCallback
AppCompat 1.6.0-alpha05 (AndroidX) veya sonraki bir API'yi ya da yeni OnBackInvokedCallback
platform API'yi kullanmanız gerekir. Çoğu uygulama, geriye dönük uyumlu AndroidX API'sını kullanır.
Bu güncelleme, geri gezinmeyi düzgün bir şekilde kesmek için bir taşıma yolu sağlar. Bu yöntemde, KeyEvent.KEYCODE_BACK
ve Activity
ve Dialog
gibi onBackPressed
yöntemlerinin kullanıldığı sınıflardan gelen geri müdahalelerin yeni sistem Back API'leriyle değiştirilmesi gerekir.
Codelab ve Google I/O videosu
Bu sayfadaki belgelere ek olarak codelab'imizi de deneyin. Bu API, AndroidX Activity API'lerini kullanarak tahmine dayalı geri hareketini işleyen bir Web Görünümü'nün yaygın bir kullanım durumu uygulaması sağlar.
AndroidX ve platform API'lerini uygulamaya ilişkin ek örneklerin gösterildiği Google I/O videomuzu da izleyebilirsiniz.
Varsayılan geri gezinmeyi kullanan bir uygulamayı güncelleme
Uygulamanız herhangi bir özel geri davranış uygulamazsa (başka bir deyişle, geri işlenmesi sisteme bırakırsa) uygulamanızı bu özelliği destekleyecek şekilde güncellemek oldukça kolaydır. Bu kılavuzda açıklandığı şekilde bu özelliği etkinleştirin.
Uygulamanızda Parçalar veya Gezinme Bileşeni kullanılıyorsa ayrıca AndroidX Activity 1.6.0-alpha05 veya sonraki bir sürüme de geçin.
Özel geri gezinme kullanan bir uygulamayı güncelleme
Uygulamanız özel geri davranışı uyguluyorsa AndroidX kullanıp kullanmadığına ve geri gezinmeyi nasıl ele aldığına bağlı olarak farklı taşıma yolları vardır.
Uygulamanız AndroidX kullanıyor | Uygulamanız geri gezinmeyi nasıl işler? | Önerilen taşıma yolu (bu sayfadaki bağlantı) |
Evet | AndroidX API'leri | Mevcut bir AndroidX uygulamasını geri 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'leri kullanan bir uygulamayı platform API'lerine taşıma |
Platform API'leri desteklenmiyor ancak taşınamıyor | Bu gerekli bir özellik haline gelene kadar etkinliği erteleyin. |
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şlemi uygulayan yeni veya mevcut uygulamalar için geçerlidir.
Uygulamanız bu kategoriye giriyorsa tahmine dayalı geri hareketi için destek eklemek üzere aşağıdaki adımları izleyin:
Halihazırda
OnBackPressedDispatcher
API'lerini kullanan API'lerin (Parçalar ve Gezinme Bileşeni gibi) tahmine dayalı geri hareketiyle sorunsuz çalışmasını sağlamak için AndroidX Activity 1.6.0-alpha05 sürümüne geçiş yapın.// 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 bu sayfada açıklandığı şekilde etkinleştirin.
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:
OnBackPressedCallback
kullanarak sisteminizin Geri işleme mantığını AndroidX'inOnBackPressedDispatcher
ortamına taşıyın. Ayrıntılı bilgi için Özel geri gezinme sağlama konusuna bakın.Geri hareketi durdurmaya hazır olduğunuzda
OnBackPressedCallback
özelliğini devre dışı bırakın.OnBackPressed
veyaKeyEvent.KEYCODE_BACK
aracılığıyla etkinliklere müdahale etmeyi 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"
Uygulamanızı başarıyla taşıdıktan sonra, eve geri dönüş sistem animasyonunu görmek için tahmini geri hareketini etkinleştirin (bu sayfada açıklandığı gibi).
Desteklenmeyen geri gezinme API'leri kullanan bir uygulamayı platform API'lerine taşıyın
Uygulamanız AndroidX kitaplıklarını kullanamaz ve bunun yerine desteklenmeyen API'leri kullanarak özel Geri gezinme uyguluyor veya referans yapıyorsa OnBackInvokedCallback
platform API'ye 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.OnBackInvokedCallback
ürününde özel geri mantığınızıonBackInvokedDispatcher
ile kaydedin. Bu, geçerli etkinliğin bitmesini engeller ve kullanıcı sistem Geri gezinmesini tamamladıktan sonra, geri çağırmanızın Geri işlemine tepki verme fırsatı olur.Geri gitme hareketini durdurmaya hazır olduğunuzda
OnBackInvokedCallback
kaydını iptal edin. Aksi takdirde, kullanıcılar sistem Geri gezinme kullanırken istenmeyen davranışlarla karşılaşabilirler. Örneğin, görünümler arasında "takılıp kalma" ve onları uygulamanızdan zorla çıkmaya zorlama gibi durumlar görülebilir.Aşağıda,
onBackPressed
mantığından taşıma mantığının 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) */ } ); } }
Android 13 ve sonraki sürümler için
OnBackPressed
veyaKeyEvent.KEYCODE_BACK
aracılığıyla etkinliklere müdahale etmeyi durdurun.Uygulamanızı başarıyla taşıdıktan sonra,
OnBackInvokedCallback
geçerlilik kazanması için tahmini geri hareketini etkinleştirin (bu sayfada açıklandığı gibi).
PRIORITY_DEFAULT
veya PRIORITY_OVERLAY
ile OnBackInvokedCallback
kaydettirebilirsiniz. Bu sistem, benzer AndroidX OnBackPressedCallback
sürümünde mevcut değildir. Bazı durumlarda PRIORITY_OVERLAY
ile geri çağırmanın kaydedilmesi faydalı olur. Bu durum, onKeyPreIme()
ürününden geçiş yaptığınızda ve geri arama işleminizin açık bir IME yerine geri hareketini alması gerektiği durumlar olabilir. IME'ler, açıldıklarında geri çağırmaları PRIORITY_DEFAULT
ile kaydeder.
OnBackInvokedDispatcher
uygulamasının açık IME yerine geri çağırmanıza geri hareketini dağıtması için geri çağırmanızı PRIORITY_OVERLAY
ile kaydedin.
Tahmine dayalı geri hareketini etkinleştir
Uygulamanızı kendi durumunuza göre nasıl güncelleyeceğinize karar verdikten sonra, tahmine dayalı geri hareketini desteklemeyi etkinleştirin.
Kaydolmak için AndroidManifest.xml
bölümündeki <application>
etiketindeki android:enableOnBackInvokedCallback
işaretini true
olarak ayarlayın.
<application
...
android:enableOnBackInvokedCallback="true"
... >
...
</application>
Bir değer sağlamazsanız varsayılan olarak false
olur ve şunları yapar:
- Tahmine dayalı geri hareketi sistemi animasyonunu devre dışı bırakır.
OnBackInvokedCallback
çağrılarını yoksayar ancakOnBackPressedCallback
çağrıları çalışmaya devam eder.
Etkinlik düzeyinde etkinleştirme
Android 14'ten itibaren android:enableOnBackInvokedCallback
işaretiyle etkinlik düzeyinde tahmine dayalı sistem animasyonlarını etkinleştirebilirsiniz. Bu davranış, büyük çok etkinlikli uygulamaları tahmine dayalı geri hareketlerine taşımayı daha yönetilebilir hale getirir.
Aşağıdaki kod, MainActivity
öğesinden eve geri dönüş sistem animasyonunu etkinleştirmek için enableOnBackInvokedCallback
öğesinin kullanılmasına ilişkin bir örnek gösterir:
<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, ".SecondActivity"
için android:enableOnBackInvokedCallback=true
değerinin ayarlanması etkinlikler arası sistem animasyonunu etkinleştirir.
android:enableOnBackInvokedCallback
işaretini kullanırken aşağıdaki noktaları göz önünde bulundurun:
android:enableOnBackInvokedCallback=false
ayarlandığında, etiketi ayarladığınız yere bağlı olarak etkinlik düzeyinde veya uygulama düzeyinde tahmine dayalı geri animasyonları devre dışı bırakılır ve sisteme,OnBackInvokedCallback
platform API'sine yapılan çağrıları yoksayma talimatı verilir. Bununla birlikte,OnBackPressedCallback
geriye dönük uyumlu olduğundan ve Android 13'ten önce desteklenmeyenonBackPressed
API'yi çağırdığındanOnBackPressedCallback
çağrıları çalışmaya devam eder.enableOnBackInvokedCallback
işaretini uygulama düzeyinde ayarlamak, uygulamadaki tüm etkinlikler için varsayılan değeri oluşturur. Önceki kod örneğinde gösterildiği gibi, işareti etkinlik düzeyinde ayarlayarak etkinlik başına varsayılan değeri geçersiz kılabilirsiniz.
Geri çağırma ile ilgili en iyi uygulamalar
Desteklenen sistem geri çağırmalarını kullanmayla ilgili en iyi uygulamaları burada bulabilirsiniz:
BackHandler
(Oluştur 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 adımları uygulamanızı öneririz.
Her geri çağırmayı etkinleştiren ve devre dışı bırakan kullanıcı arayüzü durumunu belirleyin.
Bu durumu
StateFlow
veya Oluşturma Durumu gibi gözlemlenebilir bir veri sahibi türü kullanarak tanımlayın ve durum değiştikçe geri çağırmayı etkinleştirin veya devre dışı bırakın.
Uygulamanız önceden mantığı koşullu ifadelerle ilişkilendiriyorsa bu, geri etkinliğe gerçekleştikten sonra tepki verdiğiniz anlamına gelebilir. Bu, yeni geri çağırmalarda kaçınmanız gereken bir kalıptır. Mümkünse geri çağırmayı koşullu ifadenin dışına taşıyın ve bunun yerine geri çağırmayı gözlemlenebilir bir veri sahibi türüyle ilişkilendirin.
UI Logic için sistem geri çağırmalarını kullan
UI mantığı, kullanıcı arayüzünün nasıl görüntüleneceğini belirtir. Pop-up görüntüleme veya bir animasyon çalıştırma gibi kullanıcı arayüzü mantığını çalıştırmak için sistem geri geri çağırmalarını kullanın.
Uygulamanız bir sistem geri geri çağırmasını etkinleştirirse tahmine dayalı animasyonlar çalışmaz ve geri etkinliği işlemeniz gerekir. Yalnızca kullanıcı arayüzü olmayan mantığı çalıştırmak için geri çağırmalar oluşturmayın.
Örneğin, etkinlikleri yalnızca günlüğe kaydetmek için müdahale ediyorsanız bunun yerine Etkinlik veya Parça yaşam döngüsünde günlüğe kaydedin.
- Etkinlikten etkinliğe veya parçadan etkinliğe durumlar için,
onDestroy
içindekiisFinishing
değerinin Etkinlik yaşam döngüsü içindetrue
olup olmadığını kaydedin. - Parçadan parçaya kullanım söz konusu olduğunda,
onDestroy
içindekiisRemoving
değerinin Fragment'ın görüntüleme yaşam döngüsünde doğru olması durumunda günlüğe kaydedin. Alternatif olarak,FragmentManager.OnBackStackChangedListener
içindekionBackStackChangeStarted
veyaonBackStackChangeCommitted
yöntemlerini kullanarak da günlüğe kaydedebilirsiniz.
Compose destek kaydı için Oluşturma hedefiyle ilişkilendirilmiş ViewModel
için onCleared()
geri çağırmasını kaydedin. Bu, bir oluşturma hedefinin arka yığından çıkarılıp imha edildiğini bilmek için en iyi sinyaldir.
Tek sorumluluk geri çağırmaları oluşturma
Bu, sevk görevlisine birden fazla geri çağırma ekleyebilmeniz nedeniyle mümkündür. Geri çağırmalar, en son eklenen etkin geri çağırmanın bir sonraki geri çağırma hareketini her geri arama hareketiyle işlediği bir yığına eklenir.
Tahmine dayalı geri hareketi animasyonunu test etme
Android 13'ün son sürümünden itibaren, şekil 1'de gösterilen eve geri dönüş animasyonunu test etmek için bir geliştirici seçeneğini etkinleştirebilmeniz gerekir.
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 animasyonları'nı seçin.
Güncellenmiş uygulamanızı başlatın ve nasıl çalıştığını görmek için geri hareketini kullanın.