簡體   English   中英

如何在Java中縮放/縮放Android WebView

[英]How to Zoom/Scale an Android WebView in Java

實際上,我有兩個Web視圖,並且我想基於第一個Web視圖來縮放/平移其他Web視圖。 為此,該應用程序已使用以下代碼,在android 3.0上正常運行,但在更高版本的設備上不起作用。 我檢查並拋出異常-mZoomManager的“未找到字段”異常。

我想知道其他縮放Webview的方法嗎? 不能使用webView.setInitialScale();

public void setScale(float scale_factor) throws IllegalArgumentException,
        IllegalAccessException, ClassNotFoundException {
    try {
        float temp_scale = scale_factor * 0.01f;
        Class<WebView> webViewClass = (Class<WebView>) this.getClass()
                .getSuperclass();
        Field mZoomManagerField = webViewClass
                .getDeclaredField("mZoomManager");
        mZoomManagerField.setAccessible(true);
        Object mZoomManagerInstance = mZoomManagerField.get(this);

        Class<?> zoomManagerClass;
        try {
            zoomManagerClass = Class.forName("android.webkit.ZoomManager");
            Field mInitialScale = zoomManagerClass
                    .getDeclaredField("mInitialScale");
            mInitialScale.setAccessible(true);
            mInitialScale.set(mZoomManagerInstance, temp_scale);

            Field mActualScale = zoomManagerClass
                    .getDeclaredField("mActualScale");
            mActualScale.setAccessible(true);
            if (temp_scale >=1) {
                mActualScale.set(mZoomManagerInstance, temp_scale);
            } else {
                Field mDefaultScale = zoomManagerClass
                        .getDeclaredField("mDefaultScale");
                mDefaultScale.setAccessible(true);
                Object obj=temp_scale;
                mDefaultScale.set(mZoomManagerInstance, obj);
                mActualScale.set(mZoomManagerInstance, temp_scale);
            }

            Field mInvActualScale = zoomManagerClass
                    .getDeclaredField("mInvActualScale");
            mInvActualScale.setAccessible(true);
            mInvActualScale.set(mZoomManagerInstance, 1 / temp_scale);
        } catch (Exception e) {
            e.printStackTrace();
        }

    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    }

}

經過三天的研究,我無法找到任何解決方案,因為我不得不從android 8到23級提供支持。

所以我想出了使用

dependentWebView.setInitialScale(mainWebView.getScale()*100);

並再次加載dependentWebView。

在這種情況下縮放不理想。 我嘗試覆蓋setInitialScale以為其提供浮點值以提高准確性,但由於縮放在不同的android版本中以不同的方式處理,因此無法執行。

發布此解決方案,以便其他人可以獲得幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM