Saat pengguna memberikan fokus pada tampilan teks yang dapat diedit seperti elemen EditText
dan pengguna memasang keyboard hardware, semua input akan ditangani oleh sistem. Akan tetapi, jika Anda ingin memotong sendiri 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 harus mengganti metode callback pada ekstensi tersebut jika diperlukan.
Catatan: Saat menangani peristiwa keyboard dengan class KeyEvent
dan API terkait, Anda akan mengetahui bahwa peristiwa keyboard tersebut hanya berasal dari keyboard hardware. Anda sebaiknya tidak perlu bergantung pada penerimaan peristiwa penting untuk tombol apa pun pada metode masukan virtual (keyboard virtual).
Menangani peristiwa penting tunggal
Untuk menangani penekanan tombol individual, implementasikan onKeyDown()
atau onKeyUp()
jika diperlukan. Biasanya, Anda harus 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 kunci pengubah seperti saat suatu tombol digabungkan dengan Shift atau Control, Anda dapat membuat kueri KeyEvent
yang diteruskan ke metode callback. Beberapa metode menyediakan informasi tentang kunci pengubah seperti getModifiers()
dan getMetaState()
. Akan tetapi solusi yang paling sederhana adalah memeriksa apakah kunci pengubah yang Anda inginkan ditekan dengan metode seperti isShiftPressed()
dan isCtrlPressed()
.
Misalnya, berikut adalah implementasi onKeyDown()
, dengan beberapa 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); } }