【Touch&input 】處理鍵盤操作(14)

當用戶將注意力集中到可編輯的文本視圖(例如EditText 元素)並且用戶連接了硬件鍵盤時,所有輸入都由系統處理。但是,如果您想要自己攔截或直接處理鍵盤輸入,則可以通過從KeyEvent.Callback接口實現回調方法(如onKeyDown()和)來實現onKeyMultiple()。

這兩個類Activity和View類都實現了 KeyEvent.Callback接口,所以你應該適當地覆蓋這些類的擴展中的回調方法。

注意:在使用KeyEvent類和相關API 處理鍵盤事件時,您應該期望這些鍵盤事件僅來自硬件鍵盤。您絕對不應該依靠軟輸入法(屏幕鍵盤)上的任何按鍵來接收按鍵事件。

處理單個關鍵事件


處理個人按鍵,實施onKeyDown()或onKeyUp()酌情。通常情況下,onKeyUp()如果你想確保你只收到一個事件,你應該使用。如果用戶按下並按住按鈕,則會onKeyDown()多次調用。

例如,這個實現響應一些鍵盤按鍵來控制遊戲:

@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()。

例如,這裏onKeyDown()再次實現了一些額外的處理,以便在按住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);
    }
}
Lastest Update:2018.04.17

聯繫我

QQ:94297366
微信打賞:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ

公衆號推薦:

【Touch&input 】處理鍵盤操作(14)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章