يمكن للمستخدم الخروج من نشاط على Wear OS من خلال التمرير سريعًا من اليسار إلى اليمين. إذا كان التطبيق يتضمّن ميزة التمرير الأفقي، يمكن للمستخدم الخروج من خلال الانتقال إلى حافة المحتوى ثم التمرير سريعًا من اليسار إلى اليمين. يؤدي الضغط على زر التشغيل أيضًا إلى إعادة المستخدم إلى شاشة الساعة.
إيماءة التمرير سريعًا للإغلاق
يمكن للمستخدمين التمرير سريعًا من اليسار إلى اليمين لإغلاق الشاشة الحالية. لذلك، ننصحك باستخدام ما يلي:
- التنسيقات العمودية
- حاويات المحتوى
ننصحك أيضًا بعدم تضمين تطبيقك لـ إيماءات التمرير السريع الأفقي.
إغلاق نشاط
تتضمّن الأنشطة تلقائيًا ميزة التمرير سريعًا للإغلاق. يؤدي التمرير سريعًا لنشاط من اليسار إلى اليمين إلى إغلاقه، وينتقل التطبيق إلى أسفل سجلّ الرجوع.
إغلاق جزء
لاستخدام ميزة التمرير سريعًا للإغلاق في الأجزاء، عليك تضمين طريقة العرض التي تحتوي على الجزء في الفئة
SwipeDismissFrameLayout. ضَع ذلك في الاعتبار
عند تحديد ما إذا كنت تريد استخدام الأجزاء. استخدِم الفئة
SwipeDismissFrameLayout كما هو موضّح في المثال التالي:
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; } }
ملاحظة: عند استخدام الأجزاء داخل نشاطك، استخدِم
FragmentManager.add
بدلاً من
FragmentManager.replace
لاستخدام إيماءة التمرير سريعًا للإغلاق.
يساعد ذلك في ضمان عرض الجزء السابق أسفل الجزء العلوي أثناء التمرير سريعًا لإزالته.
طرق العرض القابلة للتمرير الأفقي
في بعض الحالات، مثل طريقة عرض تحتوي على خريطة تتيح التحريك، لا يمكن لواجهة المستخدم منع التمرير السريع الأفقي. في هذا السيناريو، هناك خياران:
- إذا كان سجلّ الرجوع قصيرًا، يمكن للمستخدم إغلاق التطبيق والعودة إلى الشاشة الرئيسية للساعة من خلال الضغط على زر التشغيل.
- إذا كنت تريد أن ينتقل المستخدم إلى أسفل الأنشطة السابقة، يمكنك تضمين طريقة العرض
في عنصر
SwipeDismissFrameLayoutالذي يتيح التمرير السريع من الحافة. يتم تفعيل ميزة التمرير السريع من الحافة عندما تعرض طريقة العرض أو العناصر التابعة لها القيمةtrueمن طلبcanScrollHorizontally(). تتيح ميزة التمرير السريع من الحافة للمستخدم إغلاق طريقة العرض من خلال التمرير سريعًا من% 10 من الشاشة في أقصى اليسار، بدلاً من أي مكان في طريقة العرض.
توضّح الأمثلة التالية كيفية تضمين طريقة عرض في عنصر
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>
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); } } );
إجراء لا ننصح به: إيقاف ميزة التمرير سريعًا للإغلاق
لا ننصحك عادةً بإيقاف ميزة التمرير سريعًا للإغلاق، لأنّ المستخدم
يتوقّع إغلاق أي شاشة من خلال التمرير سريعًا. في حالة استثنائية،
يمكنك توسيع المظهر التلقائي
في أحد
موارد الأنماط
وضبط السمة android:windowSwipeToDismiss
على false، كما هو موضّح في عينة التعليمات البرمجية التالية:
<resources> <style name="AppTheme" parent="@android:style/Theme.DeviceDefault"> <item name="android:windowSwipeToDismiss">false</item> </style> </resources>
يمكنك بعد ذلك إعلام المستخدمين في أول استخدام لتطبيقك بأنّه يمكنهم الخروج من التطبيق من خلال الضغط على زر التشغيل.
الإغلاق باستخدام زر التشغيل
يؤدي الضغط على زر التشغيل الفعلي إلى إرسال حدث مفتاح التشغيل. لذلك، لا يمكنك استخدام زر التشغيل كزر رجوع زر أو للتنقّل بشكل عام.
عند الضغط على زر التشغيل، يعود المستخدم إلى الشاشة الرئيسية للساعة. وهناك استثناءان:
- إذا كان المستخدم في محرر طريقة الإدخال (IME)، مثل شاشة التعرّف على الكتابة اليدوية يؤدي الضغط على الزر إلى إغلاق محرر طريقة الإدخال وإعادة المستخدم إلى التطبيق.
- إذا كان المستخدم على خلفية شاشة الساعة، يؤدي الضغط على زر الجهاز إلى فتح مشغّل التطبيقات.
ملاحظة: عند الضغط على زر التشغيل، لا تعرض طريقة
isFinishing() في الفئة Activity القيمة
true، ولا يمكنك اعتراض حدث المفتاح.
لمزيد من المعلومات، يُرجى الاطّلاع على مقالة التنقّل.