בעזרת תנועות על פרק כף היד אפשר לבצע אינטראקציה מהירה עם האפליקציה ביד אחת כשמסך מגע לא נוח.
לדוגמה, משתמש יכול לגלול באמצעות הודעות ביד אחת תוך כדי אחיזה בכוס מים אחר. תרחישים אחרים לדוגמה לתנועות של פרק כף היד כוללים:
- באפליקציית ריצה, ניווט בין מסכים אנכיים שמוצגים הצעדים שננקטו, הזמן שחלף והקצב הנוכחי
- באפליקציית נסיעות, גוללים בין פרטי הטיסות והשערים
- גלילה בין כתבות באפליקציית חדשות
כדי לבדוק את התנועות של פרק כף היד בשעון במכשיר, מוודאים שהתנועות מופעלת על ידי בחירה באפשרות הגדרות > תכונות מתקדמות > תנועות > תנועות של פרק כף היד מופעל. לאחר מכן משלימים את מדריך לתנועות בשעון על ידי בחירה באפשרות הפעלת המדריך.
הערה: ניעור פרק כף היד הוא פעולת חזרה או ביטול של כל המערכת והוא לא זמין לאפליקציות להתאמה אישית.
ניתן להשתמש בתנועות של פרק כף היד בדרכים הבאות, כפי שמתואר במדריך הזה:
- בפריסה מעוגלת, כולל פעולות תנועות מוגדרות מראש
- להשתמש באירועים מרכזיים ישירות כדי הגדרת פעולות משתמש חדשות
כל תנועה של פרק כף היד ממופה הקבועה int
KeyEvent
הכיתה, כפי שמוצג בטבלה הבאה:
תנועה | אירוע מרכזי | תיאור |
---|---|---|
תנועה של פרק כף היד החוצה |
KEYCODE_NAVIGATE_NEXT
|
קוד המפתח הזה מיועד לפריט הבא. |
תנועה של פרק כף היד פנימה |
KEYCODE_NAVIGATE_PREVIOUS
|
קוד המפתח הזה מיועד לפריט הקודם. |
שימוש בפריסה מעוקלת כדי לתמוך בתנועות על פרק כף היד
המחלקה
WearableRecyclerView
יוצרת מודל מעוקל
פריסה לרשימות ותומכת אוטומטית
תנועות על פרק כף היד. יש בכיתה פעולות מוגדרות מראש לאירועים של
כשהמיקוד הוא על פרק כף היד. מידע על השימוש
הכיתה WearableRecyclerView
, אפשר לעיין במאמר יצירת רשימות ב-Wear OS. כמו כן, אפשר לעיין
הקטע שיטות מומלצות במדריך הזה.
הערה: המחלקה WearableRecyclerView
מחליפה מחלקה דומה,
הוצא משימוש בספריית התמיכה של מכשירים לבישים.
גם אם משתמשים ב-WearableRecyclerView
, כדאי להשתמש
קבועים מ-KeyEvent
בכיתה. אפשר לבטל את הפעולות המוגדרות מראש על ידי סיווג המשנה של
WearableRecyclerView
והטמעה מחדש של
התקשרות חזרה onKeyDown()
. אפשר להשבית לגמרי את ההתנהגות הזו
באמצעות setEnableGestureNavigation(false)
.
מידע נוסף זמין במאמר הבא:
ביצוע פעולות במקלדת.
שימוש באירועים מרכזיים באופן ישיר
אפשר להשתמש באירועים מרכזיים מחוץ ל-
WearableRecyclerView
כדי להפעיל פעולות חדשות בתגובה לתנועה
אירועים. חשוב לציין שאירועי התנועה האלה מזוהים כשהמכשיר נמצא
במצב פעיל, והם נשלחים בדיוק כמו כל האירועים המרכזיים.
סיווג שקשורה לאינטראקציה של משתמשים, כמו View
או
Activity
, וההטמעה מתבצעת
לשירות
KeyEvent.Callback
יש הרשאה להאזין לאירועים מרכזיים שקשורים
תנועה על פרק כף היד בדיוק כמו שהיא יכולה להופיע בכל אירוע מרכזי אחר. מסגרת Android
קוראת לפונקציה View
או Activity
שיש בה
להתמקד באירועים המרכזיים. לתנועות, onKeyDown()
הקריאה החוזרת (callback) של ה-method מופעלת כאשר תנועות מופיעות.
לדוגמה, אפליקציה יכולה לבטל פעולות שהוגדרו מראש בקובץ View
או Activity
עם KeyEvent.Callback
באופן הבא:
Kotlin
class GesturesActivity : Activity() { /* KeyEvent.Callback */ override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean { return when (keyCode) { KeyEvent.KEYCODE_NAVIGATE_NEXT -> // Do something that advances a user View to the next item in an ordered list. moveToNextItem() KeyEvent.KEYCODE_NAVIGATE_PREVIOUS -> // Do something that advances a user View to the previous item in an ordered list. moveToPreviousItem() else -> { // If you did not handle it, let it be handled by the next possible element as determined // by the Activity. super.onKeyDown(keyCode, event) } } } /** Shows the next item in the custom list. */ private fun moveToNextItem(): Boolean { ... // Return true if handled successfully, otherwise return false. return false } /** Shows the previous item in the custom list. */ private fun moveToPreviousItem(): Boolean { ... // Return true if handled successfully, otherwise return false. return false } }
Java
public final class GesturesActivity extends Activity { @Override /* KeyEvent.Callback */ public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_NAVIGATE_NEXT: // Do something that advances a user View to the next item in an ordered list. return moveToNextItem(); case KeyEvent.KEYCODE_NAVIGATE_PREVIOUS: // Do something that advances a user View to the previous item in an ordered list. return moveToPreviousItem(); } // If you did not handle it, let it be handled by the next possible element as determined by the Activity. return super.onKeyDown(keyCode, event); } /** Shows the next item in the custom list. */ private boolean moveToNextItem() { boolean handled = false; ... // Return true if handled successfully, otherwise return false. return handled; } /** Shows the previous item in the custom list. */ private boolean moveToPreviousItem() { boolean handled = false; ... // Return true if handled successfully, otherwise return false. return handled; } }
שיטות מומלצות
- מומלץ לעיין ב
KeyEvent
ו-KeyEvent.Callback
דפים להעברה של אירועים מרכזיים אלView
ו-Activity
. - הקפדה על כיוון עקבי: אפשר להשתמש ב'שחרור פרק כף היד' עבור Next ו-"fהישג פרק כף היד פנימה" לפריט הקודם.
- כדאי להשתמש במקביל במגע כדי לבצע תנועה.
- שליחת משוב חזותי.
- אל תשתמשו בקוד מפתח כדי להטמיע פונקציונליות
בניגוד לציפיות של שאר המערכת. לדוגמה, אל תשתמשו
KEYCODE_NAVIGATE_NEXT
כדי לבטל פעולה או לעבור אל ציר עם תנועות שמאלה-ימינה. - לא מיירטים את האירועים המרכזיים באלמנטים שהם לא חלק בממשק משתמש, כמו צפיות שאינן מופיעות במסך או באופן חלקי בסרטון הזה. ההגדרה הזו זהה למקרה של כל אירוע מרכזי.
- אל תפרשו מחדש תנועות סיבוביות חוזרות ונשנות כמחווה חדשה משלכם. מצב כזה עלול להתנגש עם "רעידת פרק כף היד" של המערכת תנועה.
כדי שתצוגה מפורטת תקבל אירועים מרכזיים מסוג תנועות, היא צריכה לכלול Focus; להצגת
View.setFocusable()
.מכיוון שתנועות נחשבות לאירועים מרכזיים, הם מבצעים מעבר מ'מצב מגע' עשויה לגרום דברים. מכיוון שהמשתמשים עשויים לעבור בין שימוש במגע תנועות, ייתכן שיש צורך בשיטה
View::setFocusableInTouchmode()
. בחלק מהמקרים במקרים מסוימים, צריך גם להשתמשsetDescendantFocusability(FOCUS_BEFORE_DESCENDANTS)
כך שכאשר המיקוד משתנה לאחר שינוי למצב מגע או ממנו, מקבל את המיקוד.- שימוש ב-
requestFocus()
ובclearFocus()
בזהירות:- בשיחה אל
requestFocus()
, צריך לוודא שהוא מתאים כדי להתמקד. אם התצוגה לא מופיעה במסך או מופיעה בתצוגה אחרת, יכולות להתרחש הפתעות כשתנועות מפעילות קריאה חוזרת. - השיטה
clearFocus()
מתחילה חיפוש ממוקד כדי למצוא מודל אחר לתצוגה המתאימה. בהתאם להיררכיית התצוגות, החיפוש מחייבות חישוב לא טריוויאלי. הוא עשוי גם להקצות התמקדות לתצוגה שלא מצפה לכם להתמקד בה.
- בשיחה אל
האירועים המרכזיים מועברים קודם לתצוגה, כשהמיקוד הוא בתצוגה ההיררכיה. אם התצוגה שמתמקדת לא מטפלת באירוע, כלומר, היא מחזירה
false
– האירוע לא מועבר לתצוגת ההורה, גם לא אם הוא יכול להתמקד כשישKeyListener
. במקום זאת, האירוע מועבר לפעילות הנוכחית החזקת היררכיית התצוגות תוך התמקדות.לכן, ייתכן שיהיה צורך לאתר את כל האירועים ברמה גבוהה יותר, ולאחר מכן להעביר את הקודים הרלוונטיים. לחלופין, אפשר ליצור מחלקה משנית של הפעילות ולבטל את ההגדרה שיטה אחת (
dispatchKeyEvent(KeyEvent event)
) ליירוט מפתחות במקרה הצורך, או יטפל בהם כאשר לא מטופלים בשכבות התחתונות.