同时按下2个或更多键

时间:2011-10-25 17:11:18

标签: java android

嗨,大家好我最近一直在使用android,直到现在还没事。

当我想处理按键事件时,我只是在我的活动中覆盖onKeyDown方法。与关键事件相同。

问题是,这只适用于单个键,如果我同时按下键,只需处理一个键。

例如:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
    boolean returnValue = super.onKeyDown(keyCode, event);
    switch(keyCode){
        case KeyEvent.KEYCODE_A:
            //Do something awesome here
        return true;

        case KeyEvent.KEYCODE_C:
            //Do something even more awesome here
        return true;
    }
    return returnValue;
}

如果我同时按下“A”和“C”,则首先处理一个。

我的第一个想法是使用onKeyDown事件设置标志以跟踪按下哪些键并使用onKeyUp事件清除标志,但是当我在活动之间切换时这会失败。

现在我想要的是以下内容:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
    boolean returnValue = super.onKeyDown(keyCode, event);
    switch(keyCode){
        case KeyEvent.KEYCODE_A:
            if(/* C is pressed */){
                //Do something not so awesome here
            }
            else{
                //Do something awesome here
            }
        return true;

        case KeyEvent.KEYCODE_C:
            if(/* A is pressed */){
                //Do something not so awesome here
            }
            else{
                //Do something even more awesome here
            }
        return true;
    }
    return returnValue;
}

2 个答案:

答案 0 :(得分:2)

  

问题是,这只适用于单个键,如果我同时按下键,只需处理一个键。

这是因为除了标准的“元”键(例如,移位)之外,Android不支持多个同时按键。

答案 1 :(得分:1)

多次按键检测通常由硬件限制决定。许多键盘是使用矩阵方法设计的,因此并不总是能够唯一地检测到按下的键。

如果您使用的设备会检测到多个按键,您可以尝试将您的keydown标记存储在静态区域或可以在活动之间传递的对象中。

但请记住,最终,您的解决方案的有效性将受到硬件键盘实现的限制。