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

        });

    }

完!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章