添加GestureDetector后,Android Webview中不可单击的HTML按钮元素

时间:2019-07-03 01:20:42

标签: android html android-webview gesturedetector

上下文:我正在将HTML页面加载到Android的Web视图中。页面中有三个HTML按钮。在Web视图中,我要上下左右滑动。

问题:在向Webview添加GestureDetector之前,Webview中的HTML运行良好。添加GestureDetector代码后,HTML元素(例如按钮)将不再起作用。

我现在的位置:这是我到目前为止尝试过的内容。

package com.example.android.testwebgesture;

public class WebActivity extends Activity {



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    MyWebView webview = new MyWebView(this);
    webview.getSettings().setDomStorageEnabled(true);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setAppCacheEnabled(true);
    webview.getSettings().setLoadsImagesAutomatically(true);
    webview.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
    webview.getSettings().setMediaPlaybackRequiresUserGesture(false);
    webview.loadUrl("file:///android_asset/myhtmlpage.html");
    setContentView(webview);
}

class MyWebView extends WebView {

    Context context;
    GestureDetector gd;

    public MyWebView(Context context) {
        super(context);

        this.context = context;

        gd = new GestureDetector(this.context, sogl);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return (gd.onTouchEvent(event) || super.onTouchEvent(event));
    }

    GestureDetector.SimpleOnGestureListener sogl = new GestureDetector.SimpleOnGestureListener() {

        public boolean onDown(MotionEvent event) {
            return true;
        }

        public boolean onFling(MotionEvent downEvent, MotionEvent moveEvent, float velocityX, float velocityY) {
            boolean result = false;


            //showToast("Fling");
            return result;
        }

        @Override
        public boolean onDoubleTap(MotionEvent event) {
            Log.d(DEBUG_TAG, "onDoubleTap: " + event.toString());
            //showToast("Double tapped");

            return true;
        }

        @Override
        public boolean onSingleTapUp(MotionEvent event) {
            //showToast("Single tap");

            return true;
        }

        @Override
        public boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX,
                                float distanceY) {

        }

    };


    void showToast(String text) {
        Toast.makeText(context, text, Toast.LENGTH_LONG).show();
    }
}
}

从其他SO帖子中,我发现添加super.onTouchEvent(event)可解决此问题。但是不幸的是我仍然有这个问题。任何帮助表示赞赏!

0 个答案:

没有答案