2017-07-03 72 views
0

其實我有兩個網頁瀏覽,我想基於第一個webview縮放/平移其他webview。對於這個應用程序已經使用了以下代碼,它可以很好地適用於android 3.0,但在後面的設備上它不起作用。我檢查並拋出異常 - 我未找到Field找不到mZoomManager的異常。如何在Java中縮放/縮放Android WebView

我想知道縮放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(); 
    } 

} 

回答

0

研究了三天之後,我無法找到任何解決方案,我不得不從Android 8級給予支持,以23

所以我想出了利用

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

並再次加載dependentWebView。

這種情況下的縮放並不完美。我嘗試覆蓋setInitialScale給它一個更精確的浮點值,但不能這樣做,因爲在不同的android版本中縮放處理方式不同。

發佈此解決方案,以便其他人可能會得到幫助。