How to safely turn WebView zooming on and off as needed
On a Zoom, I found that if one waits for the zoom control to fade out before calling WebView.destroy() a crash no longer occurs. So I've overwritten WebView.destroy() to post a message to a Handler to call WebView.destroy() after a few seconds. From the WebView source we will see the fade-out interval is:
// The time that the Zoom Controls are visible before fading away
private static final long ZOOM_CONTROLS_TIMEOUT =
ViewConfiguration.getZoomControlsTimeout();
So I used ViewConfiguration.getZoomControlsTimeout() + 1000L as the delay before calling WebView's destroy method. So far no crashes.
If you only want to have pinch zoom working with your webview and you can live without the zoom buttons, you can do this to your webview:
webView.getSettings().setBuiltInZoomControls(true); // will give pinch zoom
webView.getSettings().setDisplayZoomControls(false); // but won't display the zoom buttons
adding
webView.getSettings().setBuiltInZoomControls(true);
in onDestroy / onDestroyView did not help on 3.x.
webView.getSettings().setBuiltInZoomControls(true); did not work for me.
dkneller's suggestion did work, however:
long timeout = ViewConfiguration.getZoomControlsTimeout();
new Timer().schedule(new TimerTask() {
@Override
public void run() {
webview.destroy();
}
}, timeout);