از فعالیت‌های تمام صفحه در Wear خارج شوید

روش Compose را امتحان کنید
Jetpack Compose on Wear OS جعبه ابزار UI توصیه شده برای Wear OS است.

کاربر می تواند با کشیدن انگشت از چپ به راست از فعالیت Wear OS خارج شود. اگر برنامه دارای پیمایش افقی باشد، کاربر با پیمایش به لبه محتوا و سپس کشیدن انگشت از چپ به راست خارج می‌شود. با فشار دادن دکمه پاور نیز کاربر به صفحه ساعت باز می گردد.

حرکت تند کشیدن برای رد کردن

کاربران برای بستن صفحه فعلی، انگشت خود را از چپ به راست بکشند. بنابراین توصیه می کنیم از موارد زیر استفاده کنید:

  • طرح بندی های عمودی
  • ظروف محتوا

ما همچنین توصیه می‌کنیم که برنامه شما دارای حرکات حرکتی افقی نباشد.

رد کردن یک فعالیت

فعالیت‌ها به‌طور خودکار از تند کشیدن برای رد کردن پشتیبانی می‌کنند. کشیدن یک فعالیت از چپ به راست منجر به رد کردن فعالیت می‌شود و برنامه در پشته به پایین حرکت می‌کند.

رد کردن یک قطعه

برای پشتیبانی از Swipe-to-Dimiss در قطعات، باید نمای حاوی قطعه را در کلاس SwipeDismissFrameLayout قرار دهید. هنگام تصمیم گیری در مورد استفاده از قطعات، این را در نظر بگیرید. همانطور که در مثال زیر نشان داده شده است از کلاس SwipeDismissFrameLayout استفاده کنید:

کاتلین

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)
            }
}

جاوا

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;
    }
}

توجه: هنگامی که از قطعات در فعالیت خود استفاده می کنید، از FragmentManager.add به جای FragmentManager.replace برای پشتیبانی از حرکت تند کشیدن برای رد کردن استفاده کنید. این کمک می‌کند تا اطمینان حاصل شود که قطعه قبلی شما در حالی که قطعه بالا کشیده می‌شود، زیر قسمت بالایی نمایش داده می‌شود.

نماهای اسکرول افقی

در برخی موارد، مانند یک نمای حاوی نقشه ای که از پانینگ پشتیبانی می کند، رابط کاربری نمی تواند از کشیدن انگشت به صورت افقی جلوگیری کند. در این سناریو دو گزینه وجود دارد:

  • اگر پشته پشتی کوتاه باشد، کاربر می‌تواند با فشار دادن دکمه روشن/خاموش، برنامه را حذف کرده و به صفحه اصلی صفحه ساعت بازگردد.
  • اگر می‌خواهید کاربر به پشته پایین برود، می‌توانید نما را در یک شی SwipeDismissFrameLayout بپیچید که از کشیدن لبه پشتیبانی می‌کند. کشیدن لبه زمانی فعال می شود که view یا فرزندان آن از یک فراخوانی canScrollHorizontally() true برمی گردند. تند کشیدن لبه به کاربر این امکان را می‌دهد تا با کشیدن انگشت از سمت چپ 10 درصد صفحه به جای هر نقطه‌ای در نما، نما را رد کند.

مثال‌های زیر نشان می‌دهند که چگونه یک View را در یک شیء SwipeDismissFrameLayout قرار دهید:

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

کاتلین

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

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

جاوا

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);
    }
  }
);

توصیه نمی شود: تند کشیدن برای رد کردن را غیرفعال کنید

ما معمولاً غیرفعال کردن تند کشیدن برای رد کردن را توصیه نمی‌کنیم، زیرا کاربر انتظار دارد هر صفحه‌ای را با کشیدن انگشت حذف کند. در یک مورد استثنایی، می‌توانید تم پیش‌فرض را در یک منبع سبک گسترش دهید و ویژگی android:windowSwipeToDismiss روی false تنظیم کنید، همانطور که در نمونه کد زیر نشان داده شده است:

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

سپس می توانید در اولین استفاده از برنامه خود به کاربران اطلاع دهید که می توانند با فشار دادن دکمه پاور از برنامه خارج شوند.

اخراج با دکمه پاور

با فشار دادن دکمه فیزیکی روشن/خاموش یک رویداد کلید روشن/خاموش ارسال می‌شود. بنابراین، نمی توانید از دکمه پاور به عنوان دکمه برگشت یا به طور کلی برای ناوبری استفاده کنید.

با فشار دادن دکمه پاور کاربر را به صفحه اصلی صفحه ساعت بازمی گرداند. دو استثنا وجود دارد:

  • اگر کاربر در یک ویرایشگر روش ورودی (IME)، مانند صفحه تشخیص دست خط باشد، با فشار دادن دکمه IME بسته می شود و کاربر به برنامه باز می گردد.
  • اگر کاربر روی صفحه ساعت باشد، با فشار دادن دکمه سخت‌افزار، راه‌انداز برنامه باز می‌شود.

توجه داشته باشید که وقتی دکمه روشن/خاموش فشار داده می‌شود، متد isFinishing() از کلاس Activity ، true باز نمی‌گرداند و نمی‌توانید رویداد کلید را قطع کنید.

برای اطلاعات بیشتر، به پیمایش مراجعه کنید.