Wear'da tam ekran etkinliklerden çıkma

Oluşturma yöntemini deneyin
Wear OS'te Jetpack Compose, Wear OS için önerilen kullanıcı arayüzü araç setidir.

Kullanıcılar, soldan sağa kaydırarak Wear OS etkinliklerinden çıkabilir. Uygulamada yatay kaydırma varsa kullanıcı, içeriğin kenarına gidip soldan sağa kaydırarak çıkar. Güç düğmesine basarak da kullanıcıyı kadrana döndürebilirsiniz.

Kapatmak için kaydırma hareketi

Kullanıcılar mevcut ekranı kapatmak için soldan sağa kaydırırlar. Bu nedenle, aşağıdakileri kullanmanızı öneririz:

  • Dikey düzenler
  • İçerik kapsayıcıları

Ayrıca uygulamanızın yatay kaydırma hareketleri içermemesini de öneririz.

Etkinliği kapatma

Etkinlikler, kaydırarak kapatma özelliğini otomatik olarak destekler. Bir etkinliği soldan sağa kaydırmak, etkinliğin kapatılmasına neden olur ve uygulama geri yığında aşağı doğru ilerler.

Parçaları kapatma

Parçalarda kaydırarak kapatma özelliğini desteklemek için parça içeren görünümü SwipeDismissFrameLayout sınıfına sarmanız gerekir. Parça kullanıp kullanmayacağınıza karar verirken bunu dikkate alın. Aşağıdaki örnekte gösterildiği gibi SwipeDismissFrameLayout sınıfını kullanın:

Kotlin

class SwipeDismissFragment : Fragment() {
    private val callback = object : SwipeDismissFrameLayout.Callback() {
        override fun onSwipeStarted(layout: SwipeDismissFrameLayout) {
            // Optional
        }

        override fun onSwipeCanceled(layout: SwipeDismissFrameLayout) {
            // Optional
        }

        override fun onDismissed(layout: SwipeDismissFrameLayout) {
            // Code here for custom behavior, such as going up the
            // back stack and destroying the fragment but staying in the app.
        }
    }

    override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
    ): View =
            SwipeDismissFrameLayout(activity).apply {

                // If the fragment should fill the screen (optional), then in the layout file,
                // in the androidx.wear.widget.SwipeDismissFrameLayout element,
                // set the android:layout_width and android:layout_height attributes
                // to "match_parent".

                inflater.inflate(
                        R.layout.swipe_dismiss_frame_layout,
                        this,
                        false
                ).also { inflatedView ->
                    addView(inflatedView)
                }
                addCallback(callback)
            }
}

Java

public class SwipeDismissFragment extends Fragment {
  private final Callback callback =
    new Callback() {
      @Override
        public void onSwipeStart() {
          // Optional
        }

        @Override
        public void onSwipeCancelled() {
          // Optional
        }

        @Override
        public void onDismissed(SwipeDismissFrameLayout layout) {
          // Code here for custom behavior, such as going up the
          // back stack and destroying the fragment but staying in the app.
        }
      };

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    SwipeDismissFrameLayout swipeLayout = new SwipeDismissFrameLayout(getActivity());

    // If the fragment should fill the screen (optional), then in the layout file,
    // in the androidx.wear.widget.SwipeDismissFrameLayout element,
    // set the android:layout_width and android:layout_height attributes
    // to "match_parent".

    View inflatedView = inflater.inflate(R.layout.swipe_dismiss_frame_layout, swipeLayout, false);
    swipeLayout.addView(inflatedView);
    swipeLayout.addCallback(callback);

    return swipeLayout;
    }
}

Not: Etkinliğinizde parçalar kullandığınızda, kapatmak için kaydırma hareketini desteklemek amacıyla FragmentManager.replace yerine FragmentManager.add kullanın. Bu sayede, önceki parçanız kaydırıldığında üst parçanın altında oluşturulur.

Yatay kaydırılabilir görünümler

Yakınlaştırma/uzaklaştırma özelliğini destekleyen bir harita içeren görünümlerde olduğu gibi bazı durumlarda kullanıcı arayüzü yatay kaydırmayı engelleyemez. Bu senaryoda iki seçenek vardır:

  • Geri yığın kısaysa kullanıcı, uygulamayı kapatabilir ve güç düğmesine basarak kadran ana ekranına dönebilir.
  • Kullanıcının arka yığına inmesini istiyorsanız görünümü kenar kaydırma özelliğini destekleyen bir SwipeDismissFrameLayout nesnesine sarabilirsiniz. Görünüm veya alt öğeleri bir true çağrısından döndürdüğünde kenar kaydırma etkinleştirilir canScrollHorizontally(). Kenar kaydırma, kullanıcının görünümün herhangi bir yerinden değil, ekranın en sol% 10'undan kaydırarak görünümü kapatmasına olanak tanır.

Aşağıdaki örneklerde, bir görünümün SwipeDismissFrameLayout nesnesine nasıl sarmalandığı gösterilmektedir:

<androidx.wear.widget.SwipeDismissFrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/swipe_dismiss_root" >

    <TextView
        android:id="@+id/test_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="Swipe me to dismiss me." />
</androidx.wear.widget.SwipeDismissFrameLayout>

Kotlin

activity?.findViewById<SwipeDismissFrameLayout>(R.id.swipe_dismiss_root)?.apply {
    addCallback(object : SwipeDismissFrameLayout.Callback() {

        override fun onDismissed(layout: SwipeDismissFrameLayout) {
            layout.visibility = View.GONE
        }
    })
}

Java

SwipeDismissFrameLayout testLayout =
    (SwipeDismissFrameLayout) activity.findViewById(R.id.swipe_dismiss_root);
testLayout.addCallback(new SwipeDismissFrameLayout.Callback() {
    @Override
    public void onDismissed(SwipeDismissFrameLayout layout) {
        layout.setVisibility(View.GONE);
    }
  }
);

Önerilmez: Kaydırarak kapatma özelliğini devre dışı bırakma

Kullanıcılar ekranları kaydırarak kapatmayı beklediğinden, kaydırarak kapatma özelliğini devre dışı bırakmanızı genellikle önermeyiz. İstisnai durumlarda, stil kaynağında varsayılan temayı genişletebilir ve aşağıdaki kod örneğinde gösterildiği gibi android:windowSwipeToDismiss özelliğini false olarak ayarlayabilirsiniz:

<resources>
  <style name="AppTheme" parent="@android:style/Theme.DeviceDefault">
    <item name="android:windowSwipeToDismiss">false</item>
  </style>
</resources>

Ardından, uygulamanızı ilk kez kullanan kullanıcılara güç düğmesine basarak uygulamadan çıkabileceklerini bildirebilirsiniz.

Güç düğmesiyle kapatma

Fiziksel güç düğmesine basıldığında güç anahtarı etkinliği gönderilir. Bu nedenle, güç düğmesini geri düğmesi veya genel olarak gezinme için kullanamazsınız.

Güç düğmesine basıldığında kullanıcı, kadran ana ekranına geri döner. İki istisna vardır:

  • Kullanıcı, el yazısı tanıma ekranı gibi bir Giriş Yöntemi Düzenleyici'sinde (IME)yse düğmeye basıldığında IME kapatılır ve kullanıcı uygulamaya geri döner.
  • Kullanıcı saat yüzündeyse donanım düğmesine basıldığında uygulama başlatıcı açılır.

Güç düğmesine basıldığında Activity sınıfının isFinishing() yönteminin true döndürmediğini ve önemli etkinliği durduramayacağınızı unutmayın.

Daha fazla bilgi için Gezinme başlıklı makaleyi inceleyin.