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