เมื่อผู้ใช้โฟกัสที่มุมมองข้อความที่แก้ไขได้ เช่น องค์ประกอบ 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); } }
แหล่งข้อมูลเพิ่มเติม
- เครื่องมือช่วยเหลือแป้นพิมพ์ลัด: หน้าจอระบบที่ช่วยให้ผู้ใช้ค้นหาแป้นพิมพ์ลัดที่แอปของคุณนำเสนอได้