如何禁用android webview
中的doubletap zoom。我尝试了很多东西,但它没有奏效。请建议我找到正确的解决方案。
实际上我正在从自定义html加载图像。我必须禁用完全缩放。
我尝试过以下的事情,
webview.getSettings().setSupportZoom(false);
甚至我在html中保留了元标记,并将其设为userscalable= no
。即使它对我没用。
我尝试使用GestureDetector.SimpleOnGestureListener
请告诉我,我必须在onDoubleTap
缩放任何内容。
答案 0 :(得分:2)
Override
onTouchEvent
中的WebView
它适用于所有情况。
@Override
public boolean onTouchEvent( MotionEvent event ) {
if (event.getAction() == MotionEvent.ACTION_UP) {
event.setAction(MotionEvent.ACTION_CANCEL);
super.onTouchEvent(event);
event.setAction(MotionEvent.ACTION_DOWN);
super.onTouchEvent(event);
event.setAction(MotionEvent.ACTION_UP);
}
return super.onTouchEvent(event);
}
答案 1 :(得分:1)
您是否检查过以下问题?请检查,这可能与您的问题有关。
Android WebView use setWideViewPort, disable double-tap zoom but keep pinch zoom?
答案 2 :(得分:1)
经过大量的试验和错误以及对SO的研究后,我提出了以下适用于我的应用的解决方案。
public class HelpWebView extends WebView {
private GestureDetector gestureDetector;
private AtomicBoolean mPreventAction = new AtomicBoolean(false);
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()){
mPreventAction.set(false);
return true;
}
return super.onTouchEvent(event);
} else {
return true;
}
}
private class GestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDoubleTap(MotionEvent e) {
mPreventAction.set(true);
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
mPreventAction.set(true);
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// onSingleTapConfirmed will only be called after the detector is confident
// that the user's first tap is not followed by a second tap leading to a double-tap gesture
return false; // it doesn't matter for the return value here as we only check mPreventAction above
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
mPreventAction.set(true); // this is the key! this would block double tap to zoom to fire
return false;
}
}
}
我参考了以下SO答案: https://stackoverflow.com/a/14724407/510577 https://stackoverflow.com/a/15547887/510577
答案 3 :(得分:1)
经过大量的研究,我合并了一些没有单独工作的答案,并意识到这对我来说很有效。
这会禁用WebView中的双击缩放。
首先,您需要在WebView中设置它:
YourWebView.getSettings().setUseWideViewPort(false);
然后,您需要扩展WebView。但首先需要获得比例值:
private int GetWebViewScale(){
int WebViewWidth = YourWebView.getWidth();
Double WebViewScale = new Double(WebViewWidth)/new Double(YourWebWidth); //Here, you must change YourWebWidth with your web width (in pixels)
WebViewScale = WebViewScale * 100d;
return WebViewScale.intValue();
}
现在您可以通过以下方式获取比例值:
YourWebView.setInitialScale(GetWebViewScale());
但是,如果你过早地启动代码它将无法工作,所以你将把这些代码放在WebViewClient的onLayoutChange覆盖中,如下所示:
YourWebView.addOnLayoutChangeListener(new View.OnLayoutChangeListener(){
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
YourWebView.setInitialScale(getScale());
}
});
注意:您可能会遇到问题:(两件事都发生在我身上)
修复问题#1:
在:
Double WebViewScale = new Double(WebViewWidth)/new Double(500); //(500 is my web's width)
后:
Double WebViewScale = new Double(WebViewWidth)/new Double(505); //(500+5) - (This will add some padding at the left and right of your WebView. 2,5px at the left side; 2,5 at the right side)
修复问题#2
可能你的WebView的可见性已经“消失”,当它出现时,它没有宽度。所以调用“GetWebViewScale”将无效。
当其可见性“可见”或“不可见”时,您需要调用它。