使用者將焦點放在可編輯的文字檢視區塊 (例如 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); } }
其他資源
- 鍵盤快速鍵輔助工具:系統畫面,可讓使用者搜尋應用程式提供的鍵盤快速鍵。