Android WebView缩放配置,设置网页初始缩放比例

配置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);
            }

        });

    }

完!!!

发布了106 篇原创文章 · 获赞 65 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/xialong_927/article/details/102460793
今日推荐