キーボード アクションを処理する

ユーザーが編集可能なテキストビュー( EditText ユーザーがハードウェア キーボードを接続している場合でも、 入力はシステムによって処理されます。ただし、データの取り込みと キーボード入力をご自身で直接処理する場合は、コールバック メソッドを実装して行います。 KeyEvent.Callback 発 インターフェース(onKeyDown() など) および onKeyMultiple()

Activity と と View クラスは、 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 でキーが組み合わされたときなど)に応答する [管理] をクリックすると、 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);
    }
}

参考情報