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;
    }

我已经被困了好几个小时了,所以非常感谢你的帮助!

我相信,这种行为有充分的理由,但不要认为消除焦点是一个好的解决方案。我的解决方法是触发一个keydown事件,即"激活"常规onKeyDown功能。以下是片段:

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

要解决此问题,解决方法是在按下任何DPAD键之前移除视图焦点。这对我来说是有效的。我遇到了完全相同的问题:当Android活动的视图处于焦点时,会忽略第一个DPAD键事件,即KeyDown事件:这些方法都没有被调用:onUserInteraction()dispatchKeyEvent()onKeyDown()。然而,随后的DPAD密钥事件——KeyUpKeyDownKeyUp。。。,可以被捕获。

请注意,软键(Home、Previous、Recents)和硬按钮键(button_A、button_B、button_X、button\uY)都不会出现此问题。

最新更新