W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
編寫:zhaochunqi - 原文:http://developer.android.com/training/keyboard-input/commands.html
當(dāng)用戶選中一個可編輯的文本 view(如 EditText 組件),而且用戶連接了一個實體鍵盤時,所有輸入由系統(tǒng)處理。然而,如果我們想接管或直接處理鍵盤輸入,那么可以通過實現(xiàn) KeyEvent.Callback 接口的回調(diào)方法,如 onKeyDown() 和 onKeyMultiple() 來完成上述目的。
因為 Activity 和 View 類都實現(xiàn)了 KeyEvent.Callback 接口,所以通常我們應(yīng)該在這些類的繼承中重寫回調(diào)方法。
Note: 當(dāng)使用 KeyEvent 類和相關(guān)的 API 處理鍵盤事件時,我們應(yīng)該期望這種鍵盤事件只從實體鍵盤發(fā)出。我們永遠(yuǎn)不應(yīng)該依賴從一個軟輸入法(如屏幕鍵盤)來接收按鍵事件。
處理單個的按鍵點擊,需要適當(dāng)?shù)貙崿F(xiàn) onKeyDown() 或 onKeyUp()。通常,我們使用 onKeyUp() 來確保我們只接收一個事件。如果用戶點擊并按住按鈕不放,onKeyDown() 會被調(diào)用多次。
舉例,這個實現(xiàn)響應(yīng)一些鍵盤按鍵來控制游戲:
@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 鍵組合)進行回應(yīng),我們可以查詢 KeyEvent 來傳遞到回調(diào)方法。一些方法,如 getModifiers() 和 getMetaState(),提供一些關(guān)于修飾鍵的信息。然而,最簡單的解決方案是用像 isShiftPressed() 和 isCtrlPressed() 等方法,檢查我們關(guān)心的修飾鍵是否正在被按下。
例如,有一個 onKeyDown() 的實現(xiàn),當(dāng)Shift鍵和一個其他按鍵按下時,做一些額外的處理:
@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);
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: