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

来源:互联网 发布:svg js设置 transform 编辑:程序博客网 时间:2024/06/06 10:46

场景:在一个只有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();        }    }}
阅读全文
0 0
原创粉丝点击