一般我们都会这样设置,代码如下:
mWebView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0 ) { if (mWebView != null && mWebView.canGoBack()) { mWebView.goBack(); return true; } } return false; } });
原因: setOnKeyListener之所以执行两次是因为都down和up占用了,解决方法是KeyEvent.getAction()==KeyEvent.ACTION_DOWN或者KeyEvent.getAction()==KeyEvent.ACTION_UP的时候让他执行return true;而且其他的操作需要获取getKeyCode()事件,不是getAction()动作; 解决方法: mWebView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0 && event.getAction() == KeyEvent.ACTION_DOWN) { if (mWebView != null && mWebView.canGoBack()) { mWebView.goBack(); return true; } } return false; } });