יציאה מפעילויות במסך מלא ב-Wear

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

מידע נוסף זמין במאמר הבא: ניווט.