Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android官方開發文檔Training系列課程中文版:鍵盤輸入處理之處理鍵盤按鍵

Android官方開發文檔Training系列課程中文版:鍵盤輸入處理之處理鍵盤按鍵

編輯:關於Android編程

原文地址:http://android.xsoftlab.net/training/keyboard-input/commands.html

當用戶將焦點給到可編輯文本的View時,例如EditText這種,並且該設備還擁有實體鍵盤,那麼所有的輸入都會被系統處理。然而,如果你希望可以攔截或者直接處理鍵盤的輸入事件的話,你可以通過實現回調方法KeyEvent.Callback接口來做到。比如onKeyDown()和onKeyMultiple()。

Activity與View都實現了KeyEvent.Callback接口,所以一般情況下應該重寫這兩個類的回調方法。

Note: 當通過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()檢查你所關心的組合按鍵是否被按下了。

舉個例子,下面是onKeyUp()方法的改良版本,增添了一些專門對於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);
    }
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved