実際には2つのWebviewがあり、最初のWebviewに基づいて他のWebviewをズーム/パンしたいと思います。このため、アプリケーションは既にAndroid 3.0までうまく動作する次のコードを使用しますが、それ以降のデバイスでは動作しません。私はチェックし、例外がスローされました。mZoomManagerのField Not Found例外です。JavaでAndroid 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();
}
}