1.基本使用
mWebView.setBackgroundColor(Color.RED);
mWebView.loadUrl(null); // 加载网络链接 url
webView.loadData(data, "text/html; charset=UTF-8", null); //加载HTML片段或者富文本字符串
mWebView.canGoBack(); //判断 WebView 当前是否可以返回上一页
mWebView.goBack(); //回退到上一页
mWebView.canGoForward(); //判断 WebView 当前是否可以向前一页
mWebView.goForward(); //回退到前一页
mWebView.onPause(); //类似 Activity 生命周期,页面进入后台不可见状态
mWebView.pauseTimers(); //该方法面向全局整个应用程序的webview,它会暂停所有webview的layout,parsing,JavaScript Timer。当程序进入后台时,该方法的调用可以降低CPU功耗。
mWebView.onResume(); //在调用 onPause()后,可以调用该方法来恢复 WebView 的运行。
mWebView.resumeTimers(); //恢复pauseTimers时的所有操作。(注:pauseTimers和resumeTimers 方法必须一起使用,否则再使用其它场景下的 WebView 会有问题)
mWebView.destroy(); //销毁 WebView
mWebView.clearHistory(); //清除当前 WebView 访问的历史记录。
// mWebView.clearCache(boolean includeDiskFiles); //清空网页访问留下的缓存数据。需要注意的时,由于缓存是全局的,所以只要是WebView用到的缓存都会被清空,即便其他地方也会使用到。该方法接受一个参数,从命名即可看出作用。若设为false,则只清空内存里的资源缓存,而不清空磁盘里的。
mWebView.reload(); //重新加载当前请求
// mWebView.setLayerType(int layerType, Paint paint); //设置硬件加速、软件加速
mWebView.removeAllViews(); //清除子view。
mWebView.clearSslPreferences(); // 清除ssl信息。
mWebView.clearMatches(); //清除网页查找的高亮匹配字符。
// mWebView.removeJavascriptInterface(String interfaceName); //删除interfaceName 对应的注入对象
// mWebView.addJavascriptInterface(Object object,String interfaceName); //注入 java 对象。
mWebView.setVerticalScrollBarEnabled(false); //设置垂直方向滚动条。
mWebView.setHorizontalScrollBarEnabled(false); // 设置横向滚动条。
// mWebView.loadUrl(String url, Map additionalHttpHeaders); //加载制定url并携带http header数据。
// mWebView.evaluateJavascript(String script, ValueCallback resultCallback); //Api 19 之后可以采用此方法之行 Js。
mWebView.stopLoading(); //停止 WebView 当前加载。
mWebView.clearView(); //在Android 4.3及其以上系统这个api被丢弃了, 并且这个api大多数情况下会有bug,经常不能清除掉之前的渲染数据。官方建议通过loadUrl("about:blank")来实现这个功能,阴雨需要重新加载一个页面自然时间会收到影响。
mWebView.freeMemory(); //释放内存,不过貌似不好用。
mWebView.clearFormData(); //清除自动完成填充的表单数据。需要注意的是,该方法仅仅清除当前表单域自动完成填充的表单数据,并不会清除WebView存储到本地的数据。
// mWebView.onPause() 尽力尝试暂停可以暂停的任何处理,如动画和地理位置。 不会暂停JavaScript。 要全局暂停JavaScript,可使用pauseTimers。
// mWebView.onResume() 恢复onPause() 停掉的操作;
// mWebView.pauseTimers() 暂停所有WebView的布局,解析和JavaScript定时器。 这个是一个全局请求,不仅限于这个WebView。
// mWebView.resumeTimers() 恢复所有WebView的所有布局,解析和JavaScript计时器,将恢复调度所有计时器.
2. WebSettings
WebSettings webSettings = mWebView.getSettings();
// 支持 Js 使用
webSettings.setJavaScriptEnabled(true);
// 开启DOM缓存
webSettings.setDomStorageEnabled(true);
// 开启数据库缓存
webSettings.setDatabaseEnabled(true);
// 支持自动加载图片
webSettings.setLoadsImagesAutomatically(true);
// 设置 WebView 的缓存模式
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
// 支持启用缓存模式
webSettings.setAppCacheEnabled(true);
// 设置 AppCache 最大缓存值(现在官方已经不提倡使用,已废弃)
webSettings.setAppCacheMaxSize(8 * 1024 * 1024);
// Android 私有缓存存储,如果你不调用setAppCachePath方法,WebView将不会产生这个目录
webSettings.setAppCachePath(getCacheDir().getAbsolutePath());
// 数据库路径
webSettings.setDatabasePath(getDatabasePath("html").getPath());
// 关闭密码保存提醒功能
webSettings.setSavePassword(false);
// 支持缩放
webSettings.setSupportZoom(true);
// 设置 UserAgent 属性
webSettings.setUserAgentString("");
// 允许加载本地 html 文件/false
webSettings.setAllowFileAccess(true);
// 允许通过 file url 加载的 Javascript 读取其他的本地文件,Android 4.1 之前默认是true,在 Android 4.1 及以后默认是false,也就是禁止
webSettings.setAllowFileAccessFromFileURLs(false);
// 允许通过 file url 加载的 Javascript 可以访问其他的源,包括其他的文件和 http,https 等其他的源,
// Android 4.1 之前默认是true,在 Android 4.1 及以后默认是false,也就是禁止
// 如果此设置是允许,则 setAllowFileAccessFromFileURLs 不起做用
webSettings.setAllowUniversalAccessFromFileURLs(false);
webSettings.setUseWideViewPort(true); // webview推荐使用的窗口,设置为true
webSettings.setLoadWithOverviewMode(true); // 设置webview加载的页面的模式
webSettings.setRenderPriority(RenderPriority.HIGH); //提高渲染的优先级
webSettings.setBlockNetworkImage(true); //把图片加载放在最后来加载渲染
// webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);//适应内容大小
// webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//适应屏幕,内容将自动缩放 // 4.4之前
3.图片自适应屏幕
3.1 方法一
//适应内容大小
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
//适应屏幕,内容将自动缩放
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
此方法只能4.4之前
3.2 方法二
webSettings.setUseWideViewPort(true); // webview推荐使用的窗口,设置为true
webSettings.setLoadWithOverviewMode(true); // 设置webview加载的页面的模式
此方法有些分辨率高的手机会有问题
3.3 方法三
mWebView.loadData(getHtmlData(html), "text/html;charset=utf-8", "utf-8");
private String getHtmlData(String bodyHTML) {
StringBuilder html = new StringBuilder();
html.append("")
.append("")
.append("") // 宽度填满WebView的宽度,高度自适应
// .append("")
.append("")
.append("")
.append(bodyHTML)
.append("")
.append("");
return html.toString();
}
或者引入Jsoup
public static String getHtmlContent(String html){
Document doc_Dis = Jsoup.parse(html);
Elements ele_Img = doc_Dis.getElementsByTag(“img”);
if (ele_Img.size() != 0){
for (Element e_Img : ele_Img) {
e_Img.attr(“style”, “max-width:100%;height:auto;”);
}
}
return doc_Dis.toString();
}
mWebView.loadData(getHtmlContent(html), "text/html;charset=utf-8", "utf-8");
3.4 方法四
mWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
mWebView.loadUrl("javascript:(function(){"
+ "var objs = document.getElementsByTagName('img'); "
+ "for(var i=0;i
4.加载https页面
(适用于没有证书的情况)
mWebView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// super.onReceivedSslError(view, handler, error);
handler.proceed();
}
});
5. WebView内存优化
//销毁资源
public static void destroy(WebView webview) {
webview.stopLoading(); //停止加载
((ViewGroup) webview.getParent()).removeView(webview); //把webview从视图中移除
webview.removeAllViews(); //移除webview上子view
webview.clearCache(true); //清除缓存
webview.clearHistory(); //清除历史
webview.destroy(); //销毁webview自身
//Process.killProcess(Process.myPid()); //杀死WebView所在的进程
}