משתמשים יכולים לצאת מפעילות ב-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), כמו מסך לזיהוי כתב יד, לחיצה על הלחצן תסגור את ה-IME ותחזיר את המשתמש לאפליקציה.
- אם המשתמש נמצא במסך השעון, לחיצה על לחצן החומרה פותחת את מרכז האפליקציות.
הערה: כשמקישים על לחצן ההפעלה, השיטה
isFinishing()
של הכיתה Activity
לא מחזירה את הערך true
, ואי אפשר ליירט את האירוע המרכזי.
מידע נוסף זמין בקטע ניווט.