[英]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.