配置webview缩放参数值:
//设置true,才能让Webivew支持<meta>标签的viewport属性
webSettings.setUseWideViewPort(true);
//设置可以支持缩放
webSettings.setSupportZoom(true);
//设置出现缩放工具
webSettings.setBuiltInZoomControls(true);
//设定缩放控件隐藏
webSettings.setDisplayZoomControls(false);
//最小缩放等级
setInitialScale(25);
对于setInitialScale属性详解:
setInitialScale(100); 代表不缩放。
什么是不缩放?
比如你要加载的网页中有图片的宽度是 500px ,如果你的手机分辨率(屏幕宽度) 是1000的话,那么整个图片只占一半的屏幕。 其他的字体都是按照标准展示。
缩放级别
-
如果这个时候如果你设置 setInitialScale(200) ,代表放大一倍,整个网页都会放大一倍,这个时候图片正好展示整个屏幕宽度,另外网页的字体也会放大一倍;
-
如果这个时候如果你设置setInitialScale(50) ,代表缩小一倍,这个时候图片正好展示只占屏幕的四分之一,另外网页的字体也会同时变小.
上面的设置仅限于打开的网页支持缩放功能,支不支持缩放功能取决于html的设置。
若html中设置了以下属性:
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"/>
该网页在WebView中显示的时候即是不支持缩放的。
示例:
/**
* 初始化webview
*/
private void initWebView() {
// 获取webSettings
WebSettings settings = mWebView.getSettings();
// 支持js
settings.setJavaScriptEnabled(true);
// 设置编码
settings.setDefaultTextEncodingName("utf-8");
// 不使用缓存
// settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
// 在LOAD_CACHE_ELSE_NETWORK模式下,无论是否有网络,只要本地有缓存,
// 都使用缓存。本地没有缓存时才从网络上获取。
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
// 配置缓存,否则百度地图不显示
// 设置启用或禁止访问文件数据
settings.setAllowFileAccess(true);
// 最重要的方法,一定要设置,这就是出不来的主要原因
settings.setDomStorageEnabled(true);
// 启用数据库
// settings.setDatabaseEnabled(true);
// String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
// 启用地理定位
// settings.setGeolocationEnabled(true);
// 设置定位的数据库路径
// settings.setGeolocationDatabasePath(dir);
// 设置可以支持缩放
settings.setSupportZoom(true);
// 设置出现缩放工具
//settings.setBuiltInZoomControls(true);
// 最小缩放等级
mWebView.setInitialScale(100);
// 设置本地调用对象及其接口
mWebView.addJavascriptInterface(new JsBridage(mAndroidJsImpl, this), "android");
// 覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
mWebView.setWebViewClient(new WebViewClient() {
@SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
//对拦截的url进行处理,shouldOverrideUrlLoading,拦截url加载,除资源请求的url
//shouldInterceptRequest(拦截所有url请求),此处采用加载拦截
mUrlResolve.resolveUrl(url);
//android与js交互时使用
//view.loadUrl(url);
return true;
}
@RequiresApi(Build.VERSION_CODES.N)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
//对拦截的url进行处理
mUrlResolve.resolveUrl(url);
//android与js交互时使用
//view.loadUrl(url);
return true;
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
//拦截所有请求,用document.referrer,这个属性是指从什么页面来到当前页面的。
//javascript:history.back(-1); 改为 location.href=document.referrer;
//如果A.jsp跳到B.jsp,那么这个值应该是url/A.jsp。点击锚点之后这个属性也不会变。
String url = request.getUrl().toString();
return super.shouldInterceptRequest(view, request);
}
});
}
完!!!