Saat pengguna memberikan fokus pada tampilan teks yang dapat diedit, seperti
elemen
EditText
, dan pengguna telah memasang keyboard hardware, semua
input akan ditangani oleh sistem. Namun, jika ingin menangkap
atau menangani 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 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 suatu tombol dikombinasikan dengan Shift
atau Control, Anda dapat
mengkueri KeyEvent
yang diteruskan ke metode callback. Beberapa metode
menyediakan informasi tentang tombol pengubah, seperti
getModifiers()
dan getMetaState()
.
Namun, solusi yang paling sederhana adalah memeriksa apakah
tombol pengubah yang Anda perlukan sedang ditekan dengan metode seperti
isShiftPressed()
dan isCtrlPressed()
.
Misalnya, berikut adalah implementasi onKeyUp()
lagi, dengan penanganan tambahan saat tombol Shift ditahan 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); } }
Referensi tambahan
- Bantuan Pintasan Keyboard : layar sistem yang memungkinkan pengguna menelusuri pintasan keyboard yang ditawarkan aplikasi Anda.