WebView getting rid of double tap zoom.

后端 未结 6 936
悲&欢浪女
悲&欢浪女 2020-12-19 03:18

I read many tickets on the topic of Zooming in WebViews and didnt came to an answer for my case.

Here´s my setup:

I´m using a custom webview with generally

6条回答
  •  有刺的猬
    2020-12-19 03:39

    You need to override OnTouchListener on your WebView by

        wv.setOnTouchListener(this);
    

    and inside method onTouch just check that if it detect double tab then ignore the zoom in webview by force to return true

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        onTouchEvent(event);
    
        if (doubletab)
            return true;
    
        return false;
    }
    

    You can see full code like this: MainActivity.java

    package com.example.testwebview;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.GestureDetector;
    import android.view.GestureDetector.OnGestureListener;
    import android.view.View.OnTouchListener;
    import android.view.MotionEvent;
    import android.view.View;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.widget.TextView;
    
    public class MainActivity extends Activity implements OnGestureListener, OnTouchListener, GestureDetector.OnDoubleTapListener
    {
    
        TextView tv;
        WebView wv;
        GestureDetector gd;
    
        boolean doubletab = false;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            gd = new GestureDetector(this);
    
            setContentView(R.layout.activity_main);
    
            tv = (TextView)findViewById(R.id.textView1);
            wv = (WebView)findViewById(R.id.webView1);
    
            WebSettings setting = wv.getSettings();
            setting.setBuiltInZoomControls(false);
            setting.setSupportZoom(false);
            setting.setUseWideViewPort(true);
            setting.setLoadWithOverviewMode(true);
    
            wv.setOnTouchListener(this);
            wv.loadUrl("http://www.sanook.com");
        }
        @Override
        public boolean onDoubleTap(MotionEvent arg0) {
            tv.setText("double tap");
            doubletab = true;
            // TODO Auto-generated method stub
            return false;
        }
    
        @Override
        public boolean onDoubleTapEvent(MotionEvent arg0) {
            tv.setText("double tap event");
            doubletab = true;
            // TODO Auto-generated method stub
            return false;
        }
    
        @Override
        public boolean onSingleTapConfirmed(MotionEvent arg0) {
            tv.setText("single tap confirm");
            doubletab = false;
            // TODO Auto-generated method stub
            return false;
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent me)
        {
            return gd.onTouchEvent(me);
        }
    
        @Override
        public boolean onDown(MotionEvent arg0) {
            tv.setText("down");
            doubletab = false;
            // TODO Auto-generated method stub
            return false;
        }
    
        @Override
        public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,
                float arg3) {
            tv.setText("fling");
            doubletab = false;
            // TODO Auto-generated method stub
            return false;
        }
    
        @Override
        public void onLongPress(MotionEvent arg0) {
            tv.setText("long press");
            doubletab = false;
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,
                float arg3) {
            tv.setText("scroll");
            doubletab = false;
            // TODO Auto-generated method stub
            return false;
        }
    
        @Override
        public void onShowPress(MotionEvent arg0) {
            // TODO Auto-generated method stub
            tv.setText("show press");
            doubletab = false;
    
        }
    
    
        @Override
        public boolean onSingleTapUp(MotionEvent arg0) {
            // TODO Auto-generated method stub
            tv.setText("single tab up");
            doubletab = false;
            return false;
        }
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            onTouchEvent(event);
    
            if (doubletab)
                return true;
    
            return false;
        }
    }
    

    and activity_main.xml

    
    
        
    
        
    
    
    

    don't forget to add permission in manifest.xml

    
    

提交回复
热议问题