يمكن للمستخدم الخروج من نشاط على 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
، ولا يمكنك اعتراض الحدث الرئيسي.
لمزيد من المعلومات، يُرجى الاطّلاع على التنقّل.