Android WebView 使用 setWideViewPort,禁用双击缩放但保持捏缩放?

标签 android android-webview

我正在使用这段代码,它完全符合我的要求。但是我必须在双击时实现另一个功能,并且想禁用双击缩放(但保留捏合缩放功能)。

webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setSupportZoom(true); 
webView.setInitialScale(1);

尝试手动计算比例,但没有成功(对此感觉很复杂)。 Disable Double Tap Zoom/Unzoom on a webview

Android Webview - Webpage should fit the device screen

有没有办法使用 setUseWideViewPort 和 Zoomcontrolls 但仅禁用或覆盖双击缩放?

最佳答案

最佳解决方案,只需从 MyWebView 扩展您的 WebView

 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;
        }
    }
}

关于Android WebView 使用 setWideViewPort,禁用双击缩放但保持捏缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10330296/

相关文章:

android - 菜单按钮未显示在操作栏上

java - 获取 GPS 位置时,加载另一个 URL

android - 如何覆盖 Android WebView 的 DNS 解析?

android - iOS上的教程信息气泡控件

android - 在方向更改时将 WebView 位置恢复到相同的内容 (Android)

java - 在 android studio 中检查互联网连接

android - 在android中设置html字符串的子字符串的对齐方式

java - AVD 无法启动

Android 设备已与打印机配对,但仍不断要求输入密码

Android:一个应用程序是否只有一个上下文对象