WebView全面总结

作者: 奔跑吧李博 | 来源:发表于2018-11-21 23:31 被阅读26次

Webview在我们平时开发中十分常用,几乎项目里面都会有嵌套网页。但是Webview可不是像我们平时loadUrl()就完了,它还有很多属性方法我们平时可能就没有开发出来。

  • 前进 / 后退网页
//是否可以后退
Webview.canGoBack() 
//后退网页
Webview.goBack()

//是否可以前进                     
Webview.canGoForward()
//前进网页
Webview.goForward()

//以当前页面为准,前进或者后退到历史记录中指定的steps页面数
//如果steps为负数则为后退,正数则为前进
Webview.goBackOrForward(int steps)
  • 按系统back键怎么控制网页后退而不是直接关闭webview?

在当前展示Webview的Activity中处理Back事件,监听系统back键点击,在其中调用webview.goBack()方法。

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KEYCODE_BACK) && mWebView.canGoBack()) { 
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
  • WebSettings类有哪些属性可以设置?
WebSettings webSettings = webView.getSettings();
//设置支持javascript
webSettings.setJavaScriptEnabled(true); 
//支持插件
webSettings.setPluginsEnabled(true); 

//设置自适应屏幕,两者合用
webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小 
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小

//缩放操作
webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件

webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存 
webSettings.setAllowFileAccess(true); //设置可以访问文件 
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口 
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式

//优先使用缓存
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
  • Webview属性
webView.clearCache(true);    清除缓存    
webView.clearHistory();     清除历史记录   
webView.reload();            重新加载
  • WebViewClient回调方法:

1、shouldOverrideUrlLoading() 打开网页时不调用系统浏览器, 而是在本WebView中显示;

webView.setWebViewClient(new WebViewClient(){
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) {
          view.loadUrl(url);
      return true;
      }
  });

2.onPageStarted() 开始加载页面调用

3.onPageFinished() 加载页面结束调用

  • WebChromeClient类

onProgressChanged()方法,回调加载网页进度,如有需要设置加载进度,可以在其中设置。

        webView.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onProgressChanged(WebView view, int newProgress) {

            }
        });
  • Webview内存泄漏解决

1、在使用webview时不用xml布局中引用,在代码中创建并用viewgroup调用addView()的方式。
2、在使用Activity的onDestroy方法中,让webview加载空,移除webview,webview销毁并置null。

@Override
    protected void onDestroy() {
        if (mWebView != null) {
            mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
            mWebView.clearHistory();

            ((ViewGroup) mWebView.getParent()).removeView(mWebView);
            mWebView.destroy();
            mWebView = null;
        }
        super.onDestroy();
    }
  • Webview设置缓存机制
        WebSettings settings = webView.getSettings();
        //设置缓存路径
        String cacheDirPath = getFilesDir().getAbsolutePath()+"cache/";
        settings.setAppCachePath(cacheDirPath);
        //设置缓存大小
        settings.setAppCacheMaxSize(20*1024*1024);
        //开启AppCache存储机制
        settings.setAppCacheEnabled(true);
  • 启动指定浏览器

在Android程序中我们可以通过发送显式Intent来启动指定的浏览器。例如,启动手机自带浏览器。

         Intent intent =newIntent();        
         intent.setAction("android.intent.action.VIEW");    
         Uri content_url =Uri.parse("https://www.baidu.com");   
         intent.setData(content_url);           
         intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");   
         startActivity(intent);

启动其他浏览器,只要修改以intent.setClassName(package,activity)中2个参数,对应的应用浏览器程序packagename和要启动的activity即可启动其他浏览器。

uc浏览器 com.uc.browser com.uc.browser.ActivityUpdate
opera浏览器 com.opera.mini.android com.opera.mini.android.Browser
qq浏览器 com.tencent.mtt com.tencent.mtt.MainActivity

Webview基本功能总结如上,最后,还有其他功能Webview与Android交互

相关文章

网友评论

    本文标题:WebView全面总结

    本文链接:https://www.haomeiwen.com/subject/tnzkzftx.html