码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2016-08-18 08:48:38      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

原文地址: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);
    }
}

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

标签:

原文地址:http://blog.csdn.net/sahadev_/article/details/52202226

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!