предотвратите двойное нажатие на Android WebView для достижения html, но позвольте касанию достичь html

#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
  }

}