ביצוע פעולות במקלדת

כשהמשתמש מתמקד בתצוגת טקסט ניתנת לעריכה, למשל 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);
    }
}

מקורות מידע נוספים