I am using this code and it works exactly as I want. But I have to implemented another feature on double tap and would like to disable the double tap zooming (but keeping the pinch zoom feature).
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setSupportZoom(true);
webView.setInitialScale(1);
Tried to manually calculate the scale, with no luck (which feels complicated for this). Disable Double Tap Zoom/Unzoom on a webview
Android Webview - Webpage should fit the device screen
Is there a way to use the setUseWideViewPort and Zoomcontrolls but only disable or override the double tap zoom?
best solution, just extend your WebView from MyWebView
public class HelpWebView extends WebView {
private GestureDetector gestureDetector;
private AtomicBoolean mPreventAction = new AtomicBoolean(false);
private AtomicLong mPreventActionTime = new AtomicLong(0);
public HelpWebView(Context context) {
super(context);
gestureDetector = new GestureDetector(context, new GestureListener());
}
public HelpWebView(Context context, AttributeSet attrs) {
super(context, attrs);
gestureDetector = new GestureDetector(context, new GestureListener());
}
public HelpWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
gestureDetector = new GestureDetector(context, new GestureListener());
}
public HelpWebView(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
super(context, attrs, defStyle, privateBrowsing);
gestureDetector = new GestureDetector(context, new GestureListener());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int index = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
int pointId = event.getPointerId(index);
// just use one(first) finger, prevent double tap with two and more fingers
if (pointId == 0){
gestureDetector.onTouchEvent(event);
if (mPreventAction.get()){
if (System.currentTimeMillis() - mPreventActionTime.get() > ViewConfiguration.getDoubleTapTimeout()){
mPreventAction.set(false);
} else {
return true;
}
}
return super.onTouchEvent(event);
} else {
return true;
}
}
private class GestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDoubleTap(MotionEvent e) {
mPreventAction.set(true);
mPreventActionTime.set(System.currentTimeMillis());
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
mPreventAction.set(true);
mPreventActionTime.set(System.currentTimeMillis());
return true;
}
}
}
Found a solution:
class MyWebView extends WebView {
public boolean onTouchEvent(MotionEvent event) {
gd.onTouchEvent(event);
// disable double tap zooming
if(doubleTap)
{
doubleTap = false;
return false;
}
return super.onTouchEvent(event);
}
GestureDetector.SimpleOnGestureListener sogl = new GestureDetector.SimpleOnGestureListener() {
public boolean onDoubleTap(MotionEvent e) {
showToast("Double tap");
doubleTap = true;
return false;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With