1. 程式人生 > >Android-Webview支援縮放並隱藏討厭的縮放控制條

Android-Webview支援縮放並隱藏討厭的縮放控制條

之前轉載過Android webview相關的文章,Android Webview開發問題及優化彙總,這裡講解一下實現Webview縮放以及隱藏縮放控制條所遇到的問題和坑

要支援縮放,肯定要先支援Javascript,加如下程式碼:

        //支援JS
        WebSettings settings = mWebView.getSettings();
        settings.setJavaScriptEnabled(true);

重點來了,要想支援縮放,要加如下程式碼支援

        //支援螢幕縮放
        settings.setSupportZoom(true
); settings.setBuiltInZoomControls(true);

其中settings.setBuiltInZoomControls(true)必須要加,不然縮放不起作用,筆者就曾在這掉過坑

經過上述程式碼,就可以實現webview縮放了,程式碼很簡單,但是又有一個蛋疼的問題,那就是在你縮放的時候webview右下角會出現一個討厭的縮放控制條,如下圖所示:
這裡寫圖片描述

我們怎樣去掉它呢,在Android3.0之後實現非常簡單,加一句程式碼就可以了,如下程式碼:

        //不顯示webview縮放按鈕
        settings.setDisplayZoomControls(false
);

其實到這裡本文就應該到此為止了,但有的同學問,你這個只相容到3.0以上版本,我要是相容到2.x版本呢?我想說的是,其實沒有必須再相容到2.x版本了,2.x的使用者量很少了,4.x以上的使用者已經佔到94%以上了,下面看AndroidStudio統計的各個平臺版本的使用者使用比率:

這裡寫圖片描述

所以說,我們沒有必要相容2.x了,就像IOS開發只相容到IOS7版本就OK了,但是有的同學又說,我有強迫症,我就想相容到2.x版本,其實解決方案網上都有了,這裡用到了java反射的知識,通過反射來獲取私有的屬性控制元件mZoomButtonsController,然後就其setVisibility(View.GONE)

隱藏就可以了,下面貼出程式碼實現:

public void setZoomControlGone(View view){
        Class classType;
        Field field;
        try {
            classType = WebView.class;
            field = classType.getDeclaredField("mZoomButtonsController");
            field.setAccessible(true);
            ZoomButtonsController mZoomButtonsController = new ZoomButtonsController(view);
            mZoomButtonsController.getZoomControls().setVisibility(View.GONE);
            try {
                field.set(view, mZoomButtonsController);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } 
    }

經過上面的反射程式碼,就可以達到相容2.x版本來隱藏縮放控制條了,謝謝大家!