Android-完美解决在Activity中触摸返回键onBackPressed不能触发问题

场景:在一个只有WebView组件的Activity中如何正确处理页面的返回?

之前思路是覆写Activity的onBackPressed方法,因为用户触摸“返回键“会触发该方法;后来发现在三星,OPPO等机型手机上该方法并不执行,也就说该方法并不可取。

解决方法:通过覆写dispatchKeyEvent方法,从该方法中拦截返回键,再做处理,这种方法测试后感觉兼容性不错。

代码如下:

public class WebViewDemoActivity extends Activity {

    private WebView mWebview;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mWebview = (WebView)findViewById(R.id.layout_webview);
        //init webview param
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        //拦截返回键
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK){
            //判断触摸UP事件才会进行返回事件处理
            if (event.getAction() == KeyEvent.ACTION_UP) {
                onBackPressed();
            }
            //只要是返回事件,直接返回true,表示消费掉
            return true;
        }
        return super.dispatchKeyEvent(event);
    }

    @Override
    public void onBackPressed() {
        if (mWebview != null) {
            //如果h5页面可能返回,跳转到上个页面
            if (mWebview.canGoBack()) {
                mWebview.goBack();
            } else {
                //不能返回上个页面,直接finish当前Activity
                finish();
            }
        } else {
            finish();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/dbs1215/article/details/74566156