במכשירי Wear OS מסוימים יש לחצן פיזי מסתובב. כשהמשתמש משנה את ההגדרות לחצן, גולל למעלה או למטה בתצוגה הנוכחית של האפליקציה. סוג הקלט הזה נקרא חוגה לקלט הנתונים.
הערה: המדריך הזה מתייחס בעיקר לטיפול בחוגה לקלט הנתונים באמצעות ממשקי משתמש מבוססי-תצוגה. למידע נוסף על טיפול בקלט חוגה באמצעות 'כתיבה' ל-Wear OS: חוגה לקלט הנתונים של 'כתיבה'.
מאגרים רבים שניתנים לגלילה, כמו
ScrollView
,
ListView
,
HorizontalScrollView
,
ו-WearableRecyclerView
,
תמיכה בחוגה לקלט הנתונים במקרה שהמיקוד, ללא צורך ב-Wear
קוד ספציפי למערכת ההפעלה.
נדרשת התמקדות חשובה, כי ב-Android 9 (רמת API)
28) ומעלה, הצפיות לא מקבלות מיקוד באופן מרומז.
התמקדות בשיטות מומלצות
כדי להגיב לאירועי קלט סיבוביים, מאגר שאפשר לגלול צריך להתמקד בו.
אירועי קלט סיבובי לא יופיעו בבועות
ההיררכיה. אם אין תצוגה ממוקדת, או אם התצוגה שמתמקדת בה מחזירה את הערך false
:
View.onGenericMotionEvent()
,
האירוע נשלח אל
Activity.onGenericMotionEvent()
.
ריכזנו כאן שיטות מומלצות לתגובה לאירועי קלט סיבוביים:
- חשוב לזכור שכברירת מחדל, צריך להתחיל פעילות או אפילו להקיש על
לא מתמקדת בו,
שניתן להתמקד בו. כדי למקד את התצוגה, צריך להשתמש
<requestFocus />
או להפעיל ידניתView.requestFocus()
. - סימון תצוגות מותאמות אישית שניתנות לגלילה כניתנות למיקוד באמצעות
android:focusable="true"
ו-android:focusableInTouchMode="true"
. - אם התצוגה הניתנת לגלילה מצורפת אחרי
Activity.onCreate()
– למשך לדוגמה, להמתין לסיום בקשת רשת לפני שבונים את ממשק המשתמש,requestFocus()
לאחר צירוף הקובץ. - אם הערך ההתחלתי של תצוגת הגלילה הוא
INVISIBLE
אוGONE
, קוראים לפונקציהrequestFocus()
כשמוגדרתVISIBLE
- אם הפעילות כוללת כמה תצוגות שניתן לגלול, אפשר לבחור אחת מהן להתמקד באמצעות
<requestFocus />
התיוג. אין תמיכה בגלילה בתוך רכיב באמצעות הלחצן המסתובב בצד. - אם ממשק המשתמש מכיל תצוגה אחרת שמתמקדת במשתמש
מקיים אינטראקציה איתו - לדוגמה,
InputText
, אפשר למשתמש להחזיר את המיקוד לתצוגה שניתן לגלול אם המכשיר מאבד את המיקוד על ידי האזנה להקשות בתצוגה הנגללת והתקשרותrequestFocus()
בתגובה.
התנהגות משתנה מותאמת אישית
אם התצוגה הניתנת לגלילה לא תומכת במקור בגלילה סיבובית של קלט, או אם אתם רוצים להשתמש בחוגה לקלט הנתונים שאינו גלילה - למשל להגדיל ולהקטין את התצוגה או כדי לסובב חוגות — אפשר לטפל באירועי הגלילה בעצמך. חשוב לוודא שהתצוגה תתמקד, אחרת האירועים לא יתקיימו.
קטע הקוד הבא מראה איך להשתמש ב-MotionEvent
,
InputDeviceCompat
,
ו-ViewConfigurationCompat
כדי להוסיף גלילה מותאמת אישית לתצוגה:
Kotlin
myView.setOnGenericMotionListener { v, ev -> if (ev.action == MotionEvent.ACTION_SCROLL && ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER) ) { // Don't forget the negation here val delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) * ViewConfigurationCompat.getScaledVerticalScrollFactor( ViewConfiguration.get(context), context ) // Swap these axes to scroll horizontally instead v.scrollBy(0, delta.roundToInt()) true } else { false } }
Java
myView.setOnGenericMotionListener(new View.OnGenericMotionListener() { @Override public boolean onGenericMotion(View v, MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_SCROLL && ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER) ) { // Don't forget the negation here float delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) * ViewConfigurationCompat.getScaledVerticalScrollFactor( ViewConfiguration.get(context), context ); // Swap these axes to scroll horizontally instead v.scrollBy(0, Math.round(delta)); return true; } return false; } });
בדיקה באמצעות אמולטור
שימוש באמולטור Android כדי לדמות חוגה לקלט הנתונים גלילה במכשיר Wear. צריך להפעיל את אפליקציית Wear באמולטור כדי להריץ את האפליקציה את הפרויקט או לגרור את קובץ ה-APK לאמולטור כדי להתקין אותו.
כדי לבדוק את החוגה לקלט הנתונים באמולטור:
- במנהל ה-SDK, נכנסים לכרטיסייה כלי SDK כדי: אתם צריכים להתקין את Android Emulator בגרסה 26.0.3 ואילך.
- ב-Android Studio, בוחרים באפשרות כלים > Android > AVD Manager. יוצרים מכשיר Wear חדש עם API 25 או גבוהה יותר.
- מפעילים את האמולטור מ-Android Studio.
- לוחצים על תפריט האפשרויות הנוספות של שלוש הנקודות בחלק התחתון של סרגל הכלים של האמולטור. לוחצים על חוגה לקלט הנתונים בחלון החדש כדי לפתוח את חוגה לקלט הנתונים ולנסות לבצע חוגה גלילה.
בסרטון הבא מוצג חוגה לקלט הנתונים באמולטור: