Android官方开发文档Training系列课程中文版:键盘输入处理之处理键盘按键

    xiaoxiao2025-01-29  14

    原文地址: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); } }
    转载请注明原文地址: https://ju.6miu.com/read-1295874.html
    最新回复(0)