问题原因: setOnKeyListener之所以执行两次是因为它的KeyEvent.ACTION_DOWN和KeyEvent.ACTION_UP被占用了, 解决方法是KeyEvent.getAction()==KeyEvent.ACTION_DOWN或者KeyEvent.getAction()==KeyEvent.ACTION_UP的时候让他执行return true不进行下传,也就是在按下的时候执行一次,在抬起的时候不执行方法就可以
myX5WebView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
//因为webview的ACTION_UP被占用,会调用两次,所以在抬起的时候打断,防止进行第二次操作
if (event.getAction() == KeyEvent.ACTION_UP) {
return true;
} else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) {
loadMessage("right","","");
} else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) {
loadMessage("left","","");
}else if(event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER){
loadMessage("ok","","");
} else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_DOWN) {
} else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP) {
}
return false;
}
});
loadMessage是自己定义的方法,这里可以处理自己的逻辑。
本文介绍了解决Android中setOnKeyListener重复触发的问题。通过判断KeyEvent.ACTION_UP来避免按键抬起时的重复触发,有效控制了按键响应次数。
803

被折叠的 条评论
为什么被折叠?



