onKeyDown事件第一次没有调用?

时间:2012-02-07 14:29:28

标签: android keypress onkeydown

我有一个onKeyDown事件,它不会识别第一次按键(甚至不会输入事件,我已通过生成'toast'输出进行测试)。在第二次按键和之后,它完美地工作。如果我点击屏幕上的另一个元素并再次尝试按键,则需要再按一次按键才能启动。这是代码:

public boolean onKeyDown(int keyCode, KeyEvent event)
{
    switch (keyCode) {
    case KeyEvent.KEYCODE_DPAD_LEFT:
        scorered.performClick();
        return true;


    case KeyEvent.KEYCODE_1:
        red_m1.performClick();
        return true;


        case KeyEvent.KEYCODE_DPAD_RIGHT: 
        scoreblue.performClick();
        return true;


        case KeyEvent.KEYCODE_2: 
        blue_m1.performClick();
        return true;

        case KeyEvent.KEYCODE_BACK:
            finish();
        return true;
    }
    return true;
    }

我被困了好几个小时所以非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

我敢肯定,这种行为有很好的理由,但不要认为,删除焦点是一个很好的解决方案。我的解决方法是触发keydown事件,“激活”常规的onKeyDown功能。这是片段:

new Thread(new Runnable() {         
    @Override
    public void run() {
        Instrumentation inst = new Instrumentation();
        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);
    }

}).start(); 

答案 1 :(得分:0)

要解决此问题,解决方法是在按任意DPAD键之前删除视图焦点。它适用于我的情况。我遇到了完全相同的问题:当Android Activity的视图处于焦点时,第一个DPAD键事件(即KeyDown事件)将被忽略:这些方法都不会被调用:{{1} },onUserInteraction()dispatchKeyEvent()。但是,可以捕获随后的DPAD关键事件 - onKeyDown()KeyUpKeyDown,....

请注意,软键(Home,Previous,Recents)和硬键按钮(BUTTON_A,BUTTON_B,BUTTON_X,BUTTON_Y)不会出现此问题。