處理鍵盤動作

當使用者將焦點移至可編輯的文字檢視區塊時,例如 EditText 元素,且使用者已連接硬體鍵盤。 均由系統處理不過,如果您想 或直接處理鍵盤輸入,方法是實作回呼方法 來自KeyEvent.Callback 介面,例如 onKeyDown()onKeyMultiple()

ActivityView 類別會實作 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);
    }
}

其他資源