Wear'da tam ekran etkinliklerden çıkma

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

Kullanıcılar, Wear OS etkinliğinden çıkmak için ekranı soldan sağa kaydırabilir. Uygulamada yatay kaydırma varsa kullanıcı, içeriğin kenarına gidip soldan sağa kaydırarak çıkar. Güç düğmesine basıldığında da kullanıcı saat yüzüne geri döner.

Kapatmak için kaydırma hareketi

Kullanıcılar, mevcut 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ı

Ayrıca uygulamanızda yatay kaydırma hareketleri olmamasını öneririz.

Etkinliği kapatma

Etkinlikler, kaydırarak kapatma özelliğini otomatik olarak destekler. Bir etkinliği soldan sağa kaydırdığınızda etkinlik kapatılır ve uygulama geri yığınında aşağı doğru gider.

Parçayı kapatma

Parçalarda kaydırarak kapatma özelliğini desteklemek için parçayı içeren görünümü SwipeDismissFrameLayout sınıfına sarmalamanız gerekir. Parçaları kullanıp kullanmamaya karar verirken bu durumu göz önünde bulundurun. 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 kullanırken kaydırarak kapatma hareketini desteklemek için FragmentManager.add yerine FragmentManager.replace kullanın. Bu, önceki parçanızın kaydırılırken üstteki parçanın altında oluşturulmasını sağlar.

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

Bazı durumlarda (ör. kaydırmayı destekleyen bir harita içeren görünümde) kullanıcı arayüzü yatay kaydırmayı engelleyemez. Bu senaryoda iki seçenek vardır:

  • Geriye gitme yığını kısaysa kullanıcı, güç düğmesine basarak uygulamayı kapatabilir ve saat yüzü ana ekranına dönebilir.
  • Kullanıcının geri yığınına gitmesini istiyorsanız görünümü, kenar kaydırmayı destekleyen bir SwipeDismissFrameLayout nesnesine sarmalayabilirsiniz. Görünüm veya alt öğeleri bir true çağrısından canScrollHorizontally() döndüğünde kenardan kaydırma etkinleştirilir. Kenardan kaydırma, kullanıcının görünümün herhangi bir yerinden kaydırmak yerine ekranın en solundaki% 10'luk bölümden 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 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ırakma

Kullanıcılar, herhangi bir ekranı kaydırarak kapatmayı beklediğinden kaydırarak kapatma özelliğini devre dışı bırakmanızı genellikle önermeyiz. İstisnai bir durumda, varsayılan temayı stil kaynağında 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üç tuşu etkinliği gönderilir. Bu nedenle, güç düğmesini geri düğmesi olarak veya genel olarak gezinmek için kullanamazsınız.

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

  • Kullanıcı, el yazısı tanıma ekranı gibi bir giriş yöntemi düzenleyicisindeyse (IME) düğmeye basıldığında IME kapatılır ve kullanıcı uygulamaya geri döner.
  • Kullanıcı saat yüzündeyken 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 etkinlikleri yakalayamayacağınızı unutmayın.

Daha fazla bilgi için Gezinme konusuna bakın.