天天看點

webview設定setOnKeyListener方法,onKey方法執行兩次解決方案

一般我們都會這樣設定,代碼如下:
      
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;
    }
});