一、基本使用
动态创建 WebView webview = new WebView(Context);
xml中配置
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent" />
二、网页加载方式
加载url
webView.loadUrl("http://www.jianshu.com/");
加载本地
webView.loadUrl("file:///android_asset/html/index.html");
加载sd卡文件
webView.loadUrl("content://com.Android.htmlfileprovider/sdcard/kris.html");
三、WebViewSetting(如名:WebView的设置类 设置一些 是否支持js、设置UA、 自动缩放、自适应屏幕等)
获取 WebViewSetting 对象
WebSettings mWebSettings = webView.getSettings();
//是否支持JS
mWebSettings.setJavaScriptEnabled(boolean);
//支持通过js打开新的窗口
mWebSettings.setJavaScriptCanOpenWindowsAutomatically(boolean);
//提高渲染等级
mWebSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);
//设置浏览器UA
mWebSettings.setUserAgentString("");
// 设置支持缩放
mWebSettings.setBuiltInZoomControls(boolean);
//自动缩放 需要与上一个方法同时使用
mWebSettings.setSupportZoom(boolean);
//自适应屏幕
mWebSettings.setUseWideViewPort(boolean);
mWebSettings.setLoadWithOverviewMode(boolean);
//使用localStorage则必须打开
mWebSettings.setDomStorageEnabled(boolean);
// 首先阻塞图片,让图片不显示
mWebSettings.setBlockNetworkImage(boolean);
// 页面加载好以后,在放开图片:
mWebSettings.setBlockNetworkImage(boolean);
//设置同一个界面
mWebSettings.setSupportMultipleWindows(boolean);
//禁用网络图片
mWebSettings.setBlockNetworkImage(boolean);
//getLoadsImagesAutomatically返回true才有效果
mWebSettings.setCacheMode(Int);
一个普通网页的加载cache会被检查,内容也会被重新校验,第一次访问网页时,会存储cache到本地,设置策略可以让网页加载方式发生变化.
cache模式有如下几种:
LOAD_DEFAULT: 如果我们应用程序没有设置任何cachemode, 这个是默认的cache方式。 加载一张网页会检查是否有cache,如果有并且没有过期则使用本地cache,否则 从网络上获取。
LOAD_CACHE_ELSE_NETWORK: 使用cache资源,即使过期了也使用,如果没有cache才从网络上获取。
LOAD_NO_CACHE: 不使用cache 全部从网络上获取
LOAD_CACHE_ONLY: 只使用cache上的内容。
mWebSettings.setNeedInitialFocus(boolean);// 是否禁止webview上面控件获取焦点(黄色边框)
四、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 void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
// 这里进行无网络或错误处理,具体可以根据errorCode的值进行判断,
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
//进行ssl处理 比如接受所有网站的证书
handler.proceed();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
/**
* 网页跳转:
* 1.在当前的webview跳转到新连接
* view.loadUrl(url);
* 2.调用系统浏览器跳转到新网页
* Intent i = new Intent(Intent.ACTION_VIEW);
* i.setData(Uri.parse(url));
* startActivity(i);
*/
return true;
}
});
WebResourceResponse preload(String url) {
//可拦截资源文件加载 并重定向资源
如重定向某js文件
return new WebResourceResponse(mimeType, "UTF-8", InputStream);
}
其他的功能说明有两个比较好的文章
1、https://blog.csdn.net/xiangzhihong8/article/details/51082541