לחצנים פיזיים

בדרך כלל במכשיר לביש יש כמה לחצנים פיזיים, שנקראים גם גבעולים. במכשירי Wear OS יש תמיד לפחות לחצן אחד: לחצן ההפעלה. בנוסף, יכול להיות שיש אפס או יותר כפתורים רב-תכליתיים. במכשירים מסוימים יש גם לחצן צד פיזי מסתובב.

באפליקציה, אפשר להקצות לחצנים רב-תכליתיים לפעולות שמתבצעות כשהאפליקציה פועלת בחזית. לדוגמה, אפליקציית כושר יכולה להפעיל או להשהות אימון באמצעות לחצנים רב-תכליתיים:

שעון עם כמה לחצנים בצד. המערכת מגדירה אחד מהלחצנים ככפתור רב-תכליתי.
איור 1. אפליקציית כושר ל-Wear OS שמוצגים בה לחצנים רב-תכליתיים.

במאמר עקרונות העיצוב של Wear OS מפורטים תרחישי שימוש מתאימים ושיקולי עיצוב שכדאי להתחשב בהם.

במסמך הזה מוסבר איך לאחזר מידע על לחצנים רב-תכליתיים שזמינים במכשיר ואיך לעבד לחיצות על לחצנים.

מטא-נתונים של לחצנים

כדי לקבל מידע נוסף על הלחצנים במכשיר, אפשר להשתמש ב-API שמוגדר בספריית AndroidX‏ Wear Input. מוסיפים את התלות הבאה לקובץ build.gradle של מודול האפליקציה:

dependencies {
implementation "androidx.wear:wear-input:1.2.0"
}

מספר הלחצנים

כדי לקבוע כמה לחצנים זמינים במכשיר, משתמשים בשיטה WearableButtons.getButtonCount(). השיטה הזו כוללת את לחצן ההפעלה, כך שאם השיטה מחזירה ערך שגדול מאחד, יש לחצנים רב-תכליתיים שאפשר להשתמש בהם. כדי לקבל ספירה מדויקת של כפתורים רב-תכליתיים שאפשר להקצות להם פעולות, צריך להפחית אחד מהספירה, כי הכפתור הראשון הוא תמיד כפתור ההפעלה.

קודי מקשים ללחיצות על לחצנים

כל לחצן ממופה לקבוע int מהמחלקה KeyEvent, כמו שמוצג בטבלה הבאה:

לחצן KeyEvent
כפתור רב-תכליתי 1 KEYCODE_STEM_1
כפתור רב-תכליתי 2 KEYCODE_STEM_2
כפתור 3 רב-תכליתי KEYCODE_STEM_3

בדוגמת הקוד הבאה אפשר לראות איך מקבלים את מספר הלחצנים הזמינים:

val count = WearableButtons.getButtonCount(context)

if (count > 1) {
    Log.d(TAG, "More than one button available")
}

val buttonInfo = WearableButtons.getButtonInfo(
    activity,
    KeyEvent.KEYCODE_STEM_1
)

if (buttonInfo == null) {
    // KEYCODE_STEM_1 is unavailable
    Log.d(TAG, "KEYCODE_STEM_1 not available")
} else {
    // KEYCODE_STEM_1 is present on the device
    Log.d(TAG, "KEYCODE_STEM_1 is present on the device")
}

טיפול בלחיצות על לחצנים

יש כמה קודי מקשים אפשריים של כפתורים שהאפליקציה יכולה לטפל בהם:

  • KEYCODE_STEM_1.
  • KEYCODE_STEM_2.

האפליקציה יכולה לקבל את קודי המקשים האלה ולהמיר אותם לפעולות ספציפיות בתוך האפליקציה.

כדי לטפל בלחיצה על לחצן, מטמיעים את ה-method‏ onKeyDown().

לדוגמה, ההטמעה הזו מגיבה ללחיצות על לחצנים כדי לשלוט בפעולות באפליקציה:

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
    return if (event?.repeatCount == 0) {
        when (keyCode) {
            KeyEvent.KEYCODE_STEM_1 -> {
                Log.d(TAG, "KEYCODE_STEM_1 pressed")
                true
            }
            KeyEvent.KEYCODE_STEM_2 -> {
                Log.d(TAG, "KEYCODE_STEM_2 pressed")
                true
            }
            else -> {
                super.onKeyDown(keyCode, event)
            }
        }
    } else {
        super.onKeyDown(keyCode, event)
    }
}

קובעים את מיקומי הכפתורים

ספריית AndroidX מספקת שתי שיטות שמתארות את המיקום של לחצן:

אם ממשקי ה-API האלה לא מתאימים לצרכים של האפליקציה, אפשר גם להשתמש ב-API של WearableButtons.getButtonInfo() כדי לקבל את המיקום של הלחצן במסך ולטפל בו בצורה מותאמת אישית יותר. מידע נוסף על ממשקי ה-API זמין במאמר בנושא הפניית Wear API.