在没有视口的情况下禁用Android网络浏览器上的双击缩放

时间:2013-01-29 07:23:02

标签: javascript-events android-browser

我想在Android浏览器的网页中禁用双标签缩放。 我尝试防止触摸开始和touchmove默认,取消bubble / propogarion。 甚至尝试了jquery mobile doubletap事件,但它在元素被缩放后触发。

3 个答案:

答案 0 :(得分:8)

添加以下元数据。这将停止在大多数移动浏览器中进行双击缩放,但会在页面上的任何位置停止 - 而不仅仅是在您的单个div中。它是全有或全无的,我很害怕。

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />

答案 1 :(得分:3)

扩展WebView并使用GegstureDetector检测双击。

public class DummyWebView
    extends WebView
{

    private boolean doubleTapped;

    private GestureDetector.OnGestureListener gestureListener;
    private GestureDetector.OnDoubleTapListener doubleTapListener;
    private GestureDetector gestureDetector;

    public DummyWebView(Context context,
            AttributeSet attrs,
            int defStyle)
    {
        super(context, attrs, defStyle);

        getSettings().setUseWideViewPort(true);
        getSettings().setBuiltInZoomControls(true);

        // Gesture Listener
        gestureListener = new GestureDetector.OnGestureListener()
        {

            @Override
            public boolean onSingleTapUp(MotionEvent e)
            {
                // Nothing to do
                return false;
            }

            @Override
            public void onShowPress(MotionEvent e)
            {
                // Nothing to do
            }

            @Override
            public boolean onScroll(
                    MotionEvent e1,
                    MotionEvent e2,
                    float distanceX,
                    float distanceY)
            {
                // Nothing to do
                return false;
            }

            @Override
            public void onLongPress(MotionEvent e)
            {
                // Nothing to do
            }

            @Override
            public boolean onFling(
                    MotionEvent e1,
                    MotionEvent e2,
                    float velocityX,
                    float velocityY)
            {
                // Nothing to do
                return false;
            }

            @Override
            public boolean onDown(MotionEvent e)
            {
                // Nothing to do
                return false;
            }
        };

        // Double tap listener
        doubleTapListener = new GestureDetector.OnDoubleTapListener()
        {
            @Override
            public boolean onSingleTapConfirmed(MotionEvent e)
            {
                // Nothing to do
                return false;
            }

            @Override
            public boolean onDoubleTapEvent(MotionEvent e)
            {
                // Double tap detected, we need to prevent 
                doubleTapped = true;
                return false;
            }

            @Override
            public boolean onDoubleTap(MotionEvent e)
            {


                return false;
            }
        };

        // Gesture detection on itself
        gestureDetector = new GestureDetector(getContext(), gestureListener_);
        gestureDetector.setOnDoubleTapListener(doubleTapListener);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {   
        if(gestureDetector.onTouchEvent(event)) return true;

        // Double tapping might perform zooming in/out
        // We need to prevent it
        if(doubleTapped)
        {
            doubleTapped = false;
            return doubleTapped;
        }
        return super.onTouchEvent(event);
    }


}

答案 2 :(得分:0)

<meta name="viewport" user-scalable=no" />
如果您不想针对移动设备进行优化,

将节省您的时间。