Tahmine dayalı geri hareketi için destek eklendi

Şekil 1. Telefondaki tahmine dayalı geri hareketinin görünümü ve tarzının örneği

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:

  1. 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"
    
  2. 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:

  1. Sisteminizi AndroidX'in OnBackPressedDispatcher örneğinde OnBackPressedCallback. Ayrıntılı bilgi için bkz. Özel geri gezinme sağlayın.

  2. Arkaya müdahale etmeyi durdurmaya hazır olduğunuzda OnBackPressedCallback cihazını devre dışı bırakın hareketi yapın.

  3. OnBackPressed aracılığıyla etkinliklere müdahale etmeyi durdurun veya KeyEvent.KEYCODE_BACK.

  4. Ş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"
    
  5. 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:

  1. 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.

  2. 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.

  3. 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)
               */
            }
        );
      }
    }
  4. OnBackPressed veya KeyEvent.KEYCODE_BACK üzerinden etkinliklere müdahale etmeyi durdur Android 13 ve sonraki sürümler için geçerlidir.

  5. 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, ancak OnBackPressedCallback ç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'e OnBackInvokedCallback platform API'sine yapılan çağrıları yoksayması için sistemin Ancak OnBackPressedCallback için yapılan çağrılar şu nedenle çalıştırılmaya devam eder: OnBackPressedCallback geriye dönük uyumludur ve onBackPressed 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.

  1. Her bir geri çağırmayı etkinleştiren ve devre dışı bırakan kullanıcı arayüzü durumunu belirleyin.

  2. 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çindeki isFinishing, Etkinlik yaşam döngüsünde true konumundadır.
  • Parçadan parçaya durumlar için onDestroy içindeki isRemoving 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 veya onBackStackChangeStarted veya onBackStackChangeCommitted yöntem içinde FragmentManager.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:

  1. Cihazınızda Ayarlar > Sistem > Geliştirici seçenekleri.

  2. Tahmine dayalı geri animasyonlar'ı seçin.

  3. Güncellenen uygulamanızı başlatın ve geri hareketini kullanarak uygulamanın nasıl çalıştığını görün.