Wear'da tam ekran etkinliklerden çıkma

Kullanıcı soldan sağa kaydırarak Wear OS etkinliğinden çıkabilir. Uygulamada yatay kaydırma varsa kullanıcı içeriğin kenarına gidip soldan sağa doğru kaydırarak çıkar. Güç düğmesine basıldığında da kullanıcı kadrana döner.

Kapatmak için kaydırma hareketi

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

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

Uygulamanızın yatay kaydırma hareketleri içermemesini de öneririz.

Etkinliği kapatma

Etkinlikler, kapatmak için kaydırmayı otomatik olarak destekler. Bir etkinliği soldan sağa kaydırdığınızda etkinlik kapatılır ve uygulama geri yığında aşağı doğru ilerler.

Parçayı kapat

Parçalar halinde hızlıca kaydırarak kapatma özelliğini desteklemek için parça içeren görünümü SwipeDismissFrameLayout sınıfında sarmalamanız gerekir. Parça kullanıp kullanmayacağınıza karar verirken bunu dikkate alın. SwipeDismissFrameLayout sınıfını aşağıdaki örnekte gösterildiği gibi 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 hızlıca kaydırarak kapatma hareketini desteklemek için FragmentManager.replace yerine FragmentManager.add kullanın. Bu, önceki parçanızın kaydırılırken üst parçanın altında oluşturulmasını sağlar.

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

Yatay kaydırmayı destekleyen bir harita içeren bir görünümde olduğu gibi bazı durumlarda, kullanıcı arayüzü yatay kaydırmayı önleyemez. Bu senaryoda iki seçenek vardır:

  • Arka plan grubu kısaysa kullanıcı, uygulamayı kapatıp güç düğmesine basarak kadran ana ekranına geri dönebilir.
  • Kullanıcının geri yığında aşağı inmesini isterseniz görünümü, kenar kaydırmayı destekleyen bir SwipeDismissFrameLayout nesnesi için sarmalayabilirsiniz. Görünüm veya alt öğeleri canScrollHorizontally() çağrısından true döndürdüğünde kenardan kaydırma etkinleştirilir. Kenardan kaydırma, kullanıcının görünümün herhangi bir yeri yerine ekranın en sol% 10'luk kısmından kaydırarak görünümü kapatmasına olanak tanır.

Aşağıdaki örneklerde, bir SwipeDismissFrameLayout nesnesinde görünümün nasıl sarmalanacağı 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: Kapatmak için kaydırma özelliğini devre dışı bırakın

Kullanıcılar kaydırma hareketiyle herhangi bir ekranı kapatmayı beklediği için genellikle hızlıca kaydırarak kapatma özelliğini devre dışı bırakmanızı önermeyiz. İstisnai bir durumda, aşağıdaki kod örneğinde gösterildiği gibi, varsayılan temayı bir stil kaynağında genişletebilir ve 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 kullandıklarında güç düğmesine basarak uygulamadan çıkabileceklerini kullanıcılara bildirebilirsiniz.

Güç düğmesiyle kapatma

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

Güç düğmesine basıldığında kullanıcıyı saat yüzü ana ekranına döndürür. İki istisna vardır:

  • Kullanıcı, el yazısı tanıma ekranı gibi bir Giriş Yöntemi Düzenleyici'de (IME) bulunuyorsa düğmeye basıldığında IME kapatılır ve kullanıcı uygulamaya döndürülür.
  • Kullanıcı kadrandaysa 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ğe müdahale edemeyeceğinizi unutmayın.

Daha fazla bilgi için Navigasyon bölümünü inceleyin.