เมื่อผู้ใช้โฟกัสที่มุมมองข้อความที่แก้ไขได้ เช่น องค์ประกอบ EditText และผู้ใช้มีแป้นพิมพ์ฮาร์ดแวร์ที่เชื่อมต่ออยู่ ระบบจะจัดการอินพุตทั้งหมด อย่างไรก็ตาม หากต้องการสกัดกั้น
หรือจัดการอินพุตจากแป้นพิมพ์ด้วยตนเองโดยตรง คุณสามารถทำได้โดยการใช้เมธอดเรียกกลับ
จากอินเทอร์เฟซ KeyEvent.Callback
เช่น onKeyDown()
และ onKeyMultiple()
ทั้งคลาส Activity
และ View ใช้การติดตั้งใช้งานอินเทอร์เฟซ KeyEvent.Callback ดังนั้นโดยทั่วไปคุณจะลบล้างเมธอดเรียกกลับในส่วนขยายของคลาสเหล่านี้ตามความเหมาะสม
หมายเหตุ: เมื่อจัดการเหตุการณ์ของแป้นพิมพ์ด้วยคลาส
KeyEventและ API ที่เกี่ยวข้อง
โปรดทราบว่าเหตุการณ์ของแป้นพิมพ์จะมาจากแป้นพิมพ์ฮาร์ดแวร์เท่านั้น อย่าพึ่งพาการรับเหตุการณ์
คีย์สำหรับคีย์ใดๆ ในวิธีการป้อนข้อมูลแบบนุ่ม (แป้นพิมพ์บนหน้าจอ)
จัดการเหตุการณ์แป้นเดียว
หากต้องการจัดการการกดแป้นแต่ละครั้ง ให้ใช้
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); } }
แหล่งข้อมูลเพิ่มเติม
- เครื่องมือช่วยเหลือแป้นพิมพ์ลัด: หน้าจอระบบที่ช่วยให้ผู้ใช้ค้นหาแป้นพิมพ์ลัดที่แอปของคุณมีให้