场景:在一个只有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();
}
}
}