#android #kotlin #touch-event
Вопрос:
Я пытаюсь создать гибридное приложение с помощью Android WebView.
Вот моя проблема:
у меня есть WebView и список контактов в WebView. Я хочу, чтобы события tap переходили в html, но не позволяли DoubleTap достигать html, который находится внутри webview.
и это мой код:
webView.setOnTouchListener { v, event ->
//returning true here prevents all kind of touches from reaching html
true
}
приведенный выше код предотвращает попадание всех касаний в html.
Я хочу что-то вроде этого:
webView.setOnTouchListener { v, event ->
if (doubleTap) {
//return true and prevent doubleTap from reaching html
true
} else (!doubleTap) {
//return false and let html recieve tap or any other gesture!
false
}
}
Кстати, я не хочу обрабатывать это с помощью JavaScript или чего-либо еще внутри моей html-страницы!
(скажите мне, если код очень короткий и вам нужна дополнительная информация)
Спасибо Вам Всем!
Ответ №1:
Если вы хотите идентифицировать двойные нажатия, когда они происходят, я бы посоветовал вам использовать детектор жестов.
У него есть специальный прослушиватель для двойных нажатий, называемый GestureDetector.Ондублетаплистенер.
Пример того, как использовать детектор жестов, приведен ниже (взят из документации).:
class MainActivity :
Activity(),
GestureDetector.OnGestureListener,
GestureDetector.OnDoubleTapListener {
private lateinit var mDetector: GestureDetectorCompat
// Called when the activity is first created.
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Instantiate the gesture detector with the
// application context and an implementation of
// GestureDetector.OnGestureListener
mDetector = GestureDetectorCompat(this, this)
// Set the gesture detector as the double tap
// listener.
mDetector.setOnDoubleTapListener(this)
}
override fun onTouchEvent(event: MotionEvent): Boolean {
return if (mDetector.onTouchEvent(event)) {
true
} else {
super.onTouchEvent(event)
}
}
override fun onLongPress(event: MotionEvent) {
Log.d(DEBUG_TAG, "onLongPress: $event")
}
override fun onDoubleTap(event: MotionEvent): Boolean { // <----
Log.d(DEBUG_TAG, "onDoubleTap: $event")
return true
}
override fun onDoubleTapEvent(event: MotionEvent): Boolean { // <-----
Log.d(DEBUG_TAG, "onDoubleTapEvent: $event")
return true
}
}