2017-07-03 58 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版本中缩放处理方式不同。

发布此解决方案,以便其他人可能会得到帮助。