Change long click delay

后端 未结 7 1648
不知归路
不知归路 2020-12-09 08:45

I am listening for a View\'s long click events via setOnLongClickListener(). Can I change the long click delay / duration?

7条回答
  •  醉酒成梦
    2020-12-09 09:25

    I defined an extension function in Kotlin inspired by @Galoway answer:

    fun View.setOnVeryLongClickListener(listener: () -> Unit) {
        setOnTouchListener(object : View.OnTouchListener {
    
            private val longClickDuration = 2000L
            private val handler = Handler()
    
            override fun onTouch(v: View?, event: MotionEvent?): Boolean {
                if (event?.action == MotionEvent.ACTION_DOWN) {
                    handler.postDelayed({ listener.invoke() }, longClickDuration)
                } else if (event?.action == MotionEvent.ACTION_UP) {
                    handler.removeCallbacksAndMessages(null)
                }
                return true
            }
        })
    }
    

    Use it like this:

    button.setOnVeryLongClickListener {
        // Do something here
    }
    

提交回复
热议问题