Saat pengguna memberikan fokus pada tampilan teks yang dapat diedit, seperti
EditText
pengguna, dan pengguna memasang {i>
keyboard<i} perangkat keras, yang semuanya
input ditangani oleh sistem. Namun, jika ingin mencegat
atau menangani input keyboard secara langsung sendiri, Anda dapat melakukannya dengan menerapkan metode callback
dari KeyEvent.Callback
antarmuka, seperti onKeyDown()
dan onKeyMultiple()
.
Baik Activity
dan View
class menerapkan
KeyEvent.Callback
, sehingga Anda
umumnya akan mengganti metode callback di ekstensi Anda untuk class ini, seperti
yang sesuai.
Catatan: Saat menangani peristiwa keyboard dengan
KeyEvent
dan API terkait,
memperkirakan bahwa kejadian {i>keyboard<i} hanya
berasal dari {i>keyboard<i} perangkat keras. Jangan pernah mengandalkan kunci penerima
untuk tombol apa pun pada metode input virtual (keyboard virtual).
Menangani peristiwa penting tunggal
Untuk menangani penekanan tombol satu per satu, implementasikan
onKeyDown()
atau onKeyUp()
,
sebagaimana mestinya. Biasanya, Anda menggunakan
onKeyUp()
jika ingin memastikan bahwa Anda hanya menerima satu peristiwa. Jika pengguna menekan
dan menahan tombol,
maka onKeyDown()
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 tombol digabungkan dengan Shift
atau Kontrol, Anda dapat
buat kueri KeyEvent
yang diteruskan ke metode callback. Beberapa metode
menyediakan informasi tentang tombol pengubah, seperti
getModifiers()
dan getMetaState()
.
Namun, solusi yang paling sederhana
adalah dengan memeriksa apakah
tombol pengubah yang Anda inginkan sedang ditekan dengan metode seperti
isShiftPressed()
dan isCtrlPressed()
.
Misalnya, berikut adalah implementasi onKeyUp()
sekali lagi, dengan penanganan ekstra 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); } }
Referensi lainnya
- Bantuan Pintasan Keyboard : layar sistem yang memungkinkan pengguna menelusuri pintasan keyboard yang ditawarkan aplikasi Anda.