我有一个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;
}
我被困了好几个小时所以非常感谢任何帮助!
答案 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()
,KeyUp
,KeyDown
,....
请注意,软键(Home,Previous,Recents)和硬键按钮(BUTTON_A,BUTTON_B,BUTTON_X,BUTTON_Y)不会出现此问题。