在 Android 應用開發中,處理鍵盤、實體按鍵或外接設備輸入時,KeyEvent 是核心類別。許多初學者對「KeyEvent 有多少種子事件」、「它屬於什麼變量類型」以及「KeyCode 與 KeyEvent 的關係」感到困惑。本文將系統梳理這些概念,幫助開發者建立清晰的認知框架。
KeyEvent 本身不是「子事件」的容器,而是封裝單次按鍵動作的資料物件。每一次按鍵交互(按下、釋放、長按等)都會產生一個 KeyEvent 實例。從動作類型(Action)角度,主要包含:
ACTION_DOWN:按鍵按下ACTION_UP:按鍵釋放ACTION_MULTIPLE:重複按鍵(如長按自動重複)此外,KeyEvent 還攜帶修飾鍵狀態(Shift、Ctrl、Alt 等)、事件時間、裝置 ID 等資訊。
KeyEvent 是類別,屬於引用類型。在程式中通常作為回調方法參數傳遞:
public boolean onKeyDown(int keyCode, KeyEvent event) { ... }
public boolean onKeyUp(int keyCode, KeyEvent event) { ... }
開發者不直接 new KeyEvent(),而是由系統在硬體事件發生時創建並分發。
KeyCode 是 KeyEvent 的核心屬性之一,表示「哪個鍵被觸發」。
int 常數,如 KeyEvent.KEYCODE_BACK (4)、KEYCODE_ENTER (66)、KEYCODE_DPAD_CENTER (23) 等。常見用法:
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
// 處理返回鍵按下
}
| KeyCode 常數 | 數值 | 對應鍵位 |
|---|---|---|
| KEYCODE_BACK | 4 | 返回鍵 |
| KEYCODE_HOME | 3 | Home 鍵 |
| KEYCODE_MENU | 82 | 菜單鍵 |
| KEYCODE_ENTER | 66 | 確定/換行 |
| KEYCODE_DPAD_UP/DOWN/LEFT/RIGHT/CENTER | 19/20/21/22/23 | 方向鍵/中鍵 |
| KEYCODE_VOLUME_UP/DOWN | 24/25 | 音量鍵 |
| KEYCODE_POWER | 26 | 電源鍵 |
| KEYCODE_CAMERA | 27 | 拍照鍵 |
| KEYCODE_0 ~ KEYCODE_9 | 7 ~ 16 | 數字鍵 0-9 |
| KEYCODE_A ~ KEYCODE_Z | 29 ~ 54 | 字母鍵 A-Z |
完整列表請參考 Android 官方文檔。
若需全局攔截(如實現熱鍵),可在 Activity.dispatchKeyEvent() 或 ViewGroup.dispatchKeyEvent() 中處理。
getAction() 與 getKeyCode() 判斷具體操作。理解這層關係,能讓你在處理實體鍵盤、遊戲手柄、掃描槍等外設輸入時更得心應手。