webView基础设置讲解
webView通过webSetting有很多的设置,一不注意可能就有个没有设置,然后渲染某个网页的时候失败了,下面是webView的重要设置。可以根据实际情况做调整。
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true); //支持javaScript
webSettings.setPluginState(WebSettings.PluginState.ON); //启用插件
webSettings.setUseWideViewPort(true); //将图片调整成webview大小
webSettings.setLoadWithOverviewMode(true); //缩放成屏幕大小
//设置缩放
webSettings.setSupportZoom(true); //支持缩放
webSettings.setBuiltInZoomControls(true); // 构建缩放控件,若为false,则无法缩放
webSettings.setDisplayZoomControls(true); // 是否显示默认的缩放控件
//H5本地存储使用
webSettings.setDomStorageEnabled(true); //设置DOM存储api是否启用,一般不需要打开,但是像百度之类的网站,会记录搜索记录。不设置打开不了
webSettings.setDatabaseEnabled(true); //开启 database storage API 功能
webSettings.setAppCacheEnabled(true);//开启 Application Caches 功能
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //android LOLLIPOP以上的系统,默认不支持兼容模式
//也就是当存在http站点有https元素或者https站点有http元素的时候,无法访问
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE ); //启用兼容性设置
}
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
webSettings.setAllowFileAccess(true); //设置可以访问文件
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
https的使用,https一般来说需要默认开启兼容模式,避免因为网站中同时存在https和http的链接元素 导致访问失败。
webView.setWebViewClient(new WebViewClient(){
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
//当https使用CA认证的证书的时候,一般不会产生错误,也不会执行到这里来,但是使用自己的证书的时候 比如像12306这种的网站(因为他的证书是自己颁发给自己的),会进入这个函数。 handler.proceed() 其实就是不管https的校验继续请求
//如果你想实现Https的校验,下回分解
}
});
进度条的控制
我们可以弄个进度条,表示网页的加载过程
//setWebChromeClient 功能比 setWebViewClient强大很多
//可以用来处理进度条,对话框,标题,图标等
webView.setWebChromeClient(new WebChromeClient(){
@Override // newProgress an integer between 0 and 100.
public void onProgressChanged(WebView view, int newProgress) {
progressBar.setProgress(newProgress);
super.onProgressChanged(view, newProgress);
}
@Override //标题重写
public void onReceivedTitle(WebView view, String title) {
if(null!=title&&!"".equals(title)){
tv_title.setText(title);
}
}
});
当点击系统返回键的时候 以及webview的声明周期控制
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
if(webView.canGoBack()){
webView.goBack();
}else{
finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onPause() {
webView.onPause();
webView.pauseTimers();
super.onPause();
}
@Override
protected void onResume() {
webView.onResume();
webView.resumeTimers();
super.onResume();
}
@Override
protected void onDestroy() {
if(webView!=null){
webView.clearCache(true); //清楚网页访问留下缓存
webView.clearHistory(); //清楚历史记录
webView.clearFormData(); //清楚表单数据
((ViewGroup)(webView.getParent())).removeView(webView);
webView.destroy(); //销毁webView
webView =null;
}
super.onDestroy();
}