Проверьте, использует ли 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
метод, но в соответствии сэтот ответ Нет простого способа добиться этого, и на странице могут быть и другие вложенные фреймы. Любая помощь будет оценена.
onTouchEvent
и читатьsuper.onTouchEvent()
который всегда возвращает истину, несмотря ни на что.canScrollHorizontally
а такжеcanScrollVertically
только частично решить эту проблему, как указано вышеonScrollChanged
тоже не полезноWebViewClient.onUnhandledInputEvent
никогда не срабатываетЯ рассмотрел использование JavaScript черезevaluateJavaScript
, но это очень сложное и безобразное решениеЯ пытался отследить MotionEvent поDebug.startMethodTracing
, Я узнал, что это распространяется следующим образом:android.webkit.WebView.onTouchEvent
com.android.webview.chromium.WebViewChromium.onTouchEvent
com.android.org.chromium.android_webview.AwContents.onTouchEvent
com.android.org.chromium.android_webview.AwContents$AwViewMethodsImpl.onTouchEvent
com.android.org.chromium.content.browser.ContentViewCore.onTouchEventImpl
В соответствии сИсходный код ContentViewCore событие касания заканчивается в нативном методеnativeOnTouchEvent
и я не знаю, что будет дальше с этим. Тем не мение,onTouchEvent
всегда возвращает true, и даже если бы можно было где-то выяснить, было ли событие использовано или нет, для этого потребовалось бы использование закрытых методов, что также довольно уродливо.ЗаметкаМне не нужно знать, как перехватывать сенсорные события, отправленные в WebView, но использует ли WebView их, то есть использует ли их для каких-либо действий, таких как прокрутка, перетаскивание и т. Д.