2

我有一个 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;
    }

我已经被难住了几个小时,所以非常感谢任何帮助!

4

2 回答 2

1

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

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

}).start(); 
于 2014-01-30T16:00:26.787 回答
0

要解决此问题,解决方法是在按下任何 DPAD 键之前移除视图焦点。它适用于我的情况。我遇到了完全相同的问题:当 Android Activity 的视图成为焦点时,第一个 DPAD 键事件,即KeyDown事件,被忽略:这些方法都没有被调用:onUserInteraction(), dispatchKeyEvent(), onKeyDown()。但是,可以捕获后续的 DPAD 关键事件 - KeyUpKeyDown、 、 ...。KeyUp

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

于 2013-07-05T19:44:07.213 回答