Saat pengguna memberikan fokus pada tampilan teks yang dapat diedit, seperti
elemen
EditText
, dan pengguna memasang keyboard hardware, semua
input akan ditangani oleh sistem. Namun, jika ingin mengintersep
atau menangani sendiri input keyboard secara langsung, Anda dapat melakukannya dengan mengimplementasikan metode callback
dari antarmuka
KeyEvent.Callback
, seperti onKeyDown()
dan onKeyMultiple()
.
Baik class Activity
maupun View
mengimplementasikan antarmuka KeyEvent.Callback
, sehingga Anda secara umum mengganti metode callback dalam ekstensi class ini sebagaimana mestinya.
Catatan: Saat menangani peristiwa keyboard dengan
class KeyEvent
dan API terkait,
harapkan bahwa peristiwa keyboard hanya berasal dari keyboard hardware. Jangan pernah mengandalkan penerimaan peristiwa
tombol apa pun untuk tombol apa pun pada metode input virtual (keyboard virtual).
Menangani peristiwa penting tunggal
Untuk menangani penekanan tombol individual, implementasikan
onKeyDown()
atau onKeyUp()
,
sebagaimana diperlukan. Biasanya, Anda menggunakan
onKeyUp()
jika ingin memastikan bahwa Anda hanya menerima satu peristiwa. Jika pengguna menekan dan menahan tombol,
onKeyDown()
akan dipanggil beberapa kali.
Misalnya, implementasi ini akan merespons beberapa tombol keyboard untuk mengontrol game:
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); } }
Menangani kunci pengubah
Untuk merespons peristiwa tombol pengubah, seperti saat sebuah tombol dikombinasikan dengan Shift
atau Control, Anda dapat
mengueri KeyEvent
yang diteruskan ke metode callback. Beberapa metode
memberikan informasi tentang tombol pengubah, seperti
getModifiers()
dan getMetaState()
.
Namun, solusi yang paling sederhana adalah memeriksa apakah
kunci pengubah yang Anda inginkan ditekan dengan metode seperti
isShiftPressed()
dan isCtrlPressed()
.
Misalnya, berikut adalah implementasi onKeyUp()
lagi dengan penanganan tambahan saat tombol Shift ditekan dengan salah satu tombol:
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); } }