Android中关于WebView的用法!

2017-01-06 骨哥

关于WebView的各种用法,希望大家也可以补充!谢谢

直接上需要用的代码(PS:用到WebView就必须要家访问网络权限)
//1.加载一个网页链接或加载本地网页
 webView.loadUrl(url);
//“file:///android_asset/”为加载本地网页的规范,后面是本地html文件名,androidstudio下要自己新建一个assets文件
 WebView.loadUrl("file:///android_asset/xxx.html")
//2.设置WebSettings的属性
WebSettings webSettings =   webView .getSettings();
webSettings.setJavaScriptEnabled(true);//设置WebView是否允许执行JavaScript脚本,默认false,不允许。
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//设置缓存模式,通过制定LOAD_DEFAULT, LOAD_CACHE_ELSE_NETWORK, LOAD_NO_CACHE,LOAD_CACHE_ONLY的其中一项来重写其行为。
webSettings.setSupportZoom(true);//设置WebView是否支持多窗口。如果设置为true,主程序要实现onCreateWindow(WebView, boolean, boolean, Message),默认false。
webSettings.setUseWideViewPort(true);

更多WebSettings属性可以参考WebSettings属性大全

//3.设置WebViewClient
//关于 shouldOverrideUrlLoading 返回值的误区:网上很多解释是 return true 代表在本WebView中打开链接,return false代表调用系统浏览器打开链接。其实只要设置了WebViewClient,则就不会调用系统浏览器。
webView.setWebViewClient(new MyWebViewClient());
class MyWebViewClient extends WebViewClient {

       @Override
       public void onPageStarted(WebView view, String url, Bitmap favicon) {
           super.onPageStarted(view, url, favicon);
       }

       @Override
       public void onPageFinished(WebView view, String url) {
           super.onPageFinished(view, url);
       }

       @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.toString());//如果没在onReceivedSslError方法中作处理,则必须使用该方法才能正常在本地访问淘宝天猫等网站,用shouldOverrideUrlLoading(WebView view, String url)方法不能正常访问
            return false;//建议返回false
        }

       @Override
       public void onReceivedError(final WebView view, final WebResourceRequest request, WebResourceError error) {
        //当WebView加载失败时在这里处理,可以考虑加载一个自定义View或加载一个本地html文件
       }

       @Override
       public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
           handler.proceed();//接受信任所有网站的证书,使用此方法可以解决淘宝,天猫等网站无法正常在本地加载的问题
       }
   }
//4.设置setWebChromeClient
//WebChromeClient主要用来辅助WebView处理Javascript的对话框、网站图标、网站标题以及网页加载进度等。通过WebView的setWebChromeClient()方法设置。
 webView.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                
            }
        });
//5.设置WebView回退监听
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
    webView.goBack();
    return true;
  }
  return super.onKeyDown(keyCode, event);
}

关于WebView更详细的参考文章

内容来源:https://segmentfault.com/a/1190000008020685


用户评论
开源开发学习小组列表