问题原因: 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是自己定义的方法,这里可以处理自己的逻辑。