在使用WebView控件時(shí),除了設(shè)置是否支持JS、緩存大小、緩存模式、文字編碼類(lèi)型、圖片縮放和網(wǎng)頁(yè)縮放等外,還需重寫(xiě)許多方法,具體代碼如下所示。
mWebView. setWebViewClient( new WebViewClient() { @ Override public boolean shouldOverrideUrlLoading( WebView view, String url) { if( url. startsWith(" http:") || url. startsWith(" https:") ) { return false; } //網(wǎng)頁(yè) 中 如果 有 tel:、 mailto: 這樣 的 鏈接, 需要 單獨(dú) 處理 taskUrl = url; urlTask();
return true; } // 在 以下 幾個(gè) 方法 中, 需要 關(guān)閉 加載 提示 框 @ Override public void onPageFinished( WebView view, String url) { super. onPageFinished( view, url); UIHelper. dismiss( dialogFragment); } @ Override public void onReceivedError( WebView view, int errorCode, String description, String failingUrl) { super. onReceivedError( view, errorCode, description, failingUrl); UIHelper. dismiss( dialogFragment); // 顯示 提示 用戶 遇到 錯(cuò)誤, 需要 重新 加載 的 網(wǎng)頁(yè) mWebView. loadUrl(" file:/// android_ asset/ error. html"); } @ Override public void onReceivedHttpError( WebView view, WebResourceRequest
WebResourceRequest request, WebResourceResponse errorResponse) { super. onReceivedHttpError( view, request, errorResponse); UIHelper. dismiss( dialogFragment); //顯示 提示 用戶 遇到 錯(cuò)誤, 需要 重新 加載 的 網(wǎng)頁(yè) mWebView. loadUrl(" file:/// android_ asset/ error. html"); } }); } // 返回 鍵 處理 public boolean onKeyDown( int keyCode, KeyEvent event) { if ((keyCode == KeyEvent. KEYCODE_ BACK) && mWebView. canGoBack()) { // 如果 WebView 中 打開(kāi) 了 多層 網(wǎng)頁(yè), 調(diào)用 goBack() 方法 返回 到 當(dāng)前 網(wǎng)頁(yè) 的 上層 網(wǎng)頁(yè) mWebView. goBack(); return true; } return super. onKeyDown( keyCode, event);
} public void urlTask() { if( taskUrl. startsWith(" tel:")) { // Android6. 0 及 以上 系統(tǒng) 需要 動(dòng)態(tài) 申請(qǐng) 權(quán)限 if (EasyPermissions. hasPermissions( this, Manifest. permission. CALL_ PHONE)) { Intent intent = new Intent( Intent. ACTION_ VIEW, Uri. parse( taskUrl)); startActivity( intent); } else { EasyPermissions. requestPermissions( this, getString( R. string. rationale_ call_ phone), RC_ TEL_ PERM, Manifest. permission. CALL_ PHONE); } } else { Intent intent = new Intent( Intent. ACTION_ VIEW, Uri. parse( taskUrl)); startActivity( intent); } }