HTML-элементы кнопок не активируются в веб-обозревателе Android при добавлении GestureDetector - PullRequest
0 голосов
/ 03 июля 2019

Контекст: Я загружаю HTML-страницу в веб-браузере Android.На странице есть три кнопки HTML.В веб-просмотре я хочу выполнить пролистывание вверх / вниз, вправо / влево.

Проблема: HTML-код в веб-представлении хорошо работал до добавления GestureDetector с веб-представлением.После добавления кодов 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) решает проблему.Но, к сожалению, у меня все еще есть эта проблема.Любая помощь приветствуется!

...