Проверьте, использует ли Android WebView сенсорные события

Укороченная версия

Как определить, использует ли Android WebView сенсорное событие?onTouchEvent всегда возвращает истину иWebViewClient«sonUnhandledInputEvent никогда не срабатывает.

Подробная версия

У меня есть несколько WebViews внутри TwoDScrollView. Как следует из названия, TwoDScrollView можно прокручивать как вертикально, так и горизонтально. Содержимое TwoDScrollView можно увеличивать / уменьшать. Когда пользователь перетаскивает палец или использует масштабирование, я хочу отправить событие касания:

WebView, если его содержимое прокручиваемое / масштабируемое (т.е. только внутренняя часть WebView будет прокручиваться / масштабироваться)TwoDScrollView, если указанное выше условие ложно (все содержимое TwoDScrollView будет прокручиваться / масштабироваться)

Я частично достиг этого, используяcanScrollHorizontally а такжеcanScrollVertically Методы. Но эти методы работают только для «родной прокрутки». Однако в некоторых случаях некоторый JavaScript внутри WebView использует событие касания, например, Google Maps. В этом случае методы возвращают false. Есть ли способ узнать, использует ли содержимое WebView сенсорные события, то есть можно прокручивать / масштабировать? Я не могу изменить содержимое WebView, поэтому мой вопрос отличается отэтот.

Я рассмотрел проверку сенсорных обработчиков, выполняя некоторый JavaScript внутри Webview с помощьюevaluateJavaScript метод, но в соответствии сэтот ответ Нет простого способа добиться этого, и на странице могут быть и другие вложенные фреймы. Любая помощь будет оценена.

Что я уже пробовалЯ отверг WebViewonTouchEvent и читатьsuper.onTouchEvent() который всегда возвращает истину, несмотря ни на что.canScrollHorizontally а такжеcanScrollVertically только частично решить эту проблему, как указано вышеonScrollChanged тоже не полезноWebViewClient.onUnhandledInputEvent никогда не срабатываетЯ рассмотрел использование JavaScript черезevaluateJavaScript, но это очень сложное и безобразное решениеЯ пытался отследить MotionEvent поDebug.startMethodTracing, Я узнал, что это распространяется следующим образом:android.webkit.WebView.onTouchEventcom.android.webview.chromium.WebViewChromium.onTouchEventcom.android.org.chromium.android_webview.AwContents.onTouchEventcom.android.org.chromium.android_webview.AwContents$AwViewMethodsImpl.onTouchEventcom.android.org.chromium.content.browser.ContentViewCore.onTouchEventImplВ соответствии сИсходный код ContentViewCore событие касания заканчивается в нативном методеnativeOnTouchEvent и я не знаю, что будет дальше с этим. Тем не мение,onTouchEvent всегда возвращает true, и даже если бы можно было где-то выяснить, было ли событие использовано или нет, для этого потребовалось бы использование закрытых методов, что также довольно уродливо.Заметка

Мне не нужно знать, как перехватывать сенсорные события, отправленные в WebView, но использует ли WebView их, то есть использует ли их для каких-либо действий, таких как прокрутка, перетаскивание и т. Д.

Ответы на вопрос(4)

Ваш ответ на вопрос