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