WebView的使用

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所在的进程
    }

你可能感兴趣的:(WebView的使用)