Android-完美解決在Activity中觸控返回鍵onBackPressed不能觸發問題
阿新 • • 發佈:2019-01-01
場景:在一個只有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();
}
}
}