משתמש יכול לצאת מפעילות ב-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
, ולא תוכלו ליירט את האירוע המרכזי.
מידע נוסף זמין במאמר הבא: ניווט.