我有一个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密钥事件——KeyUp
、KeyDown
、KeyUp
。。。,可以被捕获。
请注意,软键(Home、Previous、Recents)和硬按钮键(button_A、button_B、button_X、button\uY)都不会出现此问题。