כשהמשתמש מתמקד בתצוגת טקסט ניתנת לעריכה, למשל
EditText
ולמשתמש מצורפת מקלדת חומרה, והכל
המערכת מטפלת בקלט. אבל אם רוצים ליירט
או לטפל ישירות בקלט של המקלדת בעצמך, אפשר לעשות זאת באמצעות הטמעת שיטות של קריאה חוזרת
מKeyEvent.Callback
ממשק אנושי, כמו onKeyDown()
ו-onKeyMultiple()
.
גם Activity
ו-View
מטמיעים את
לממשק KeyEvent.Callback
, כך
בדרך כלל הן מבטלות את שיטות הקריאה החוזרת בתוסף של המחלקות האלה, כמו
המתאים.
הערה: כאשר מטפלים באירועי מקלדת באמצעות
מחלקה KeyEvent
וממשקי API קשורים,
אפשר לצפות שאירועי המקלדת יגיעו רק ממקלדת חומרה. לא להסתמך אף פעם על קבלת מפתח
אירועים של מקש כלשהו בשיטת קלט Soft (מקלדת שמופיעה במסך).
טיפול באירועים מרכזיים בודדים
כדי לטפל בלחיצה על מקש ספציפי, צריך להטמיע
onKeyDown()
או onKeyUp()
,
לפי הצורך. בדרך כלל, משתמשים
onKeyUp()
אם רוצים לוודא שתקבלו רק אירוע אחד. אם המשתמש לוחץ לחיצה ארוכה על מקש,
לאחר מכן קוראים אל onKeyDown()
כמה פעמים.
לדוגמה, ההטמעה הבאה מגיבה למקשי מקלדת מסוימים כדי לשלוט במשחק:
Kotlin
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when (keyCode) { KeyEvent.KEYCODE_D -> { moveShip(MOVE_LEFT) true } KeyEvent.KEYCODE_F -> { moveShip(MOVE_RIGHT) true } KeyEvent.KEYCODE_J -> { fireMachineGun() true } KeyEvent.KEYCODE_K -> { fireMissile() true } else -> super.onKeyUp(keyCode, event) } }
Java
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_D: moveShip(MOVE_LEFT); return true; case KeyEvent.KEYCODE_F: moveShip(MOVE_RIGHT); return true; case KeyEvent.KEYCODE_J: fireMachineGun(); return true; case KeyEvent.KEYCODE_K: fireMissile(); return true; default: return super.onKeyUp(keyCode, event); } }
הכינוי של מקשי הצירוף
כדי להגיב לאירועים מרכזיים של צירוף, למשל כשמשלבים את המפתח עם Shift.
או Control, אתם יכולים
לשלוח שאילתה על KeyEvent
שמועבר לשיטת הקריאה החוזרת. כמה שיטות
מספק מידע על מקשי צירוף, כמו
getModifiers()
ו-getMetaState()
.
אבל הפתרון הפשוט ביותר הוא לבדוק
מקש הצירוף המדויק שמעניין אותך הוא לחיצה באמצעות שיטות כמו
isShiftPressed()
ו-isCtrlPressed()
.
לדוגמה, כך נראה ההטמעה של onKeyUp()
שוב, עם טיפול נוסף כשמקש Shift לחוץ בעזרת אחד מהמקשים:
Kotlin
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when (keyCode) { ... KeyEvent.KEYCODE_J -> { if (event.isShiftPressed) { fireLaser() } else { fireMachineGun() } true } KeyEvent.KEYCODE_K -> { if (event.isShiftPressed) { fireSeekingMissle() } else { fireMissile() } true } else -> super.onKeyUp(keyCode, event) } }
Java
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) { ... case KeyEvent.KEYCODE_J: if (event.isShiftPressed()) { fireLaser(); } else { fireMachineGun(); } return true; case KeyEvent.KEYCODE_K: if (event.isShiftPressed()) { fireSeekingMissle(); } else { fireMissile(); } return true; default: return super.onKeyUp(keyCode, event); } }
מקורות מידע נוספים
- כלי העזרה למקשי קיצור : מסך מערכת שמאפשר למשתמשים לחפש במקשי הקיצור שהאפליקציה מציעה.