如何在android webview中禁用双击缩放?
如何在android如何在android webview中禁用双击缩放?,android,webview,scale,gesture,zooming,Android,Webview,Scale,Gesture,Zooming,如何在androidwebview中禁用双击放大功能。我试过很多东西,但都没用。请向我建议实现这一目标的正确解决方案 实际上,我正在从自定义html加载一个图像。我必须为此禁用完全缩放 我试过下面的方法 webview.getSettings().setSupportZoom(false); 甚至我还在html中保留了meta标记,并将其设置为userscalable=no。即使它对我也不起作用 我试着使用gesturedector.SimpleOnGestureListener 请让我知道我
webview
中禁用双击放大功能。我试过很多东西,但都没用。请向我建议实现这一目标的正确解决方案
实际上,我正在从自定义html加载一个图像。我必须为此禁用完全缩放
我试过下面的方法
webview.getSettings().setSupportZoom(false);
甚至我还在html中保留了meta标记,并将其设置为userscalable=no
。即使它对我也不起作用
我试着使用gesturedector.SimpleOnGestureListener
请让我知道我必须在
onDoubleTap
中缩放任何对象 你检查过下面的问题了吗?请检查,这可能与您的问题有关
经过大量的尝试和研究,我提出了以下适用于我的应用程序的解决方案
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;
}
}
}
我参考了以下答案:
覆盖您的网络视图中的onTouchEvent
它在所有情况下都有效
@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);
}
经过大量的研究,我把一些不能单独使用的答案合并在一起,并意识到一起使用对我来说是完美的
这将禁用网络视图中的双击缩放。
首先,您需要在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());
}
});
注意:您可能会遇到这样的问题:(都发生在我身上)
- WebView会水平移动一点。(#1)
- WebView没有缩放。(#2)
修复问题#1:
- 只需在“YourWebWidth”值中添加一些像素。例如:
之前:
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”将不起作用
- 当它的可见性为“可见”或“不可见”时,需要调用它
Hii。。我想在webview中禁用双击和收缩缩放。我以前看到过,但不太幸运。wv.getSettings().setSupportZoom(false);此代码在webview中禁用收缩缩放。webView.getSettings().setUseWideViewPort(false);此代码可能会禁用(不确定)webview中的双重缩放。对于双击缩放,有很多关于堆栈溢出的问题。请展开搜索。这是如何工作的?好像你在模拟另一次敲击,对吗?没错。它取消了所有可能的双抽头等,并将其替换为单抽头。