在没有设置限制的情况下放大/缩小Android Webview

时间:2012-05-02 09:22:48

标签: android webview svg android-webview zooming

在我目前的项目中,我需要我的用户能够滚动并放大大型SVG 图片。我遇到的一个主要问题是android WebView类放大和缩小的限制。有什么方法可以删除或改变这些限制到我自己的喜好? 标准缩放控件似乎不支持释放这些边界。

如果我的问题不清楚,或者我需要详细说明我的问题,请不要犹豫。

电贺, Wottah

1 个答案:

答案 0 :(得分:3)

由于似乎没有人提出与使用反射不同的解决方案 - 我现在还不知道任何替代方案 - 我写了一个快速的代码片段,说明如何绕过缩放的上限 - 在行动。

请注意,下面的代码仅适用于ICS,可能还适用于Honeycomb,但我目前没有平板电脑来检查内部工作是否依赖于相同的ZoomManager类。 Gingerbread,Froyo和Eclair似乎都或多或少直接在WebView类中实现了缩放功能。通过下面的示例,添加一些代码以考虑这些操作系统应该相当容易。

// just set an Activity's content view to a single WebView for this test
WebView mWebview = new WebView(this);
setContentView(mWebview);

// retrieve the ZoomManager from the WebView
Class<?> webViewClass = mWebview.getClass();
Field mZoomManagerField = webViewClass.getDeclaredField("mZoomManager");
mZoomManagerField.setAccessible(true);
Object mZoomManagerInstance = mZoomManagerField.get(mWebview);

// modify the "default max zoom scale" value, which controls the upper limit
// and set it to something very large; e.g. Float.MAX_VALUE
Class<?> zoomManagerClass = Class.forName("android.webkit.ZoomManager");
Field mDefaultMaxZoomScaleField = zoomManagerClass.getDeclaredField("mDefaultMaxZoomScale");
mDefaultMaxZoomScaleField.setAccessible(true);
mDefaultMaxZoomScaleField.set(mZoomManagerInstance, Float.MAX_VALUE);