在使用WebView控件时,除了设置是否支持JS、缓存大小、缓存模式、文字编码类型、图片缩放和网页缩放等外,还需重写许多方法,具体代码如下所示。
mWebView. setWebViewClient( new WebViewClient() { @ Override public boolean shouldOverrideUrlLoading( WebView view, String url) { if( url. startsWith(" http:") || url. startsWith(" https:") ) { return false; } //网页 中 如果 有 tel:、 mailto: 这样 的 链接, 需要 单独 处理 taskUrl = url; urlTask();
return true; } // 在 以下 几个 方法 中, 需要 关闭 加载 提示 框 @ 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); // 显示 提示 用户 遇到 错误, 需要 重新 加载 的 网页 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); //显示 提示 用户 遇到 错误, 需要 重新 加载 的 网页 mWebView. loadUrl(" file:/// android_ asset/ error. html"); } }); } // 返回 键 处理 public boolean onKeyDown( int keyCode, KeyEvent event) { if ((keyCode == KeyEvent. KEYCODE_ BACK) && mWebView. canGoBack()) { // 如果 WebView 中 打开 了 多层 网页, 调用 goBack() 方法 返回 到 当前 网页 的 上层 网页 mWebView. goBack(); return true; } return super. onKeyDown( keyCode, event);
} public void urlTask() { if( taskUrl. startsWith(" tel:")) { // Android6. 0 及 以上 系统 需要 动态 申请 权限 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); } }