Android Kotlin OnTouchListener已调用,但它不重写performClick
如何在Kotlin中覆盖Android Kotlin OnTouchListener已调用,但它不重写performClick,android,kotlin,ontouchlistener,Android,Kotlin,Ontouchlistener,如何在Kotlin中覆盖performClick,以避免警告 next.setOnTouchListener(View.OnTouchListener { view, motionEvent -> when (motionEvent.action){ MotionEvent.ACTION_DOWN -> { val icon: Drawable = ContextCompat.getDrawable(activi
performClick
,以避免警告
next.setOnTouchListener(View.OnTouchListener { view, motionEvent ->
when (motionEvent.action){
MotionEvent.ACTION_DOWN -> {
val icon: Drawable = ContextCompat.getDrawable(activity.applicationContext, R.drawable.layer_bt_next)
icon.setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY)
next.setImageDrawable(icon)
}
MotionEvent.ACTION_UP -> {
//view.performClick()
next.setImageResource(R.drawable.layer_bt_next)
}
}
return@OnTouchListener true
})
查看。performClick
不起作用。好的,我通过重写OnTouch侦听器解决了自己的问题
override fun onTouch(view: View, motionEvent: MotionEvent): Boolean {
when (view) {
next -> {
Log.d("next", "yeyy")
when (motionEvent.action){
MotionEvent.ACTION_DOWN -> {
val icon: Drawable = ContextCompat.getDrawable(activity.applicationContext, R.drawable.layer_bt_next)
icon.setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY)
next.setImageDrawable(icon)
}
MotionEvent.ACTION_UP -> {
view.performClick()
next.setImageResource(R.drawable.layer_bt_next)
}
}
}
previous -> {
//ingredients here XD
}
}
return true
}
这样,我可以调用single onTouch并将其实现为多个按钮,还可以通过以下方式使用onClick:
view.performClick()
不要忘记实施:
View.OnTouchListener
并设置侦听器:
next.setOnTouchListener(this)
previous.setOnTouchListener(this)
我认为你的解决方案实际上无法解决警告中提出的问题。警告指出某些辅助功能使用
performClick()
激活按钮。如果查看视图
类,则performClick()
函数直接调用onClickListener
,这意味着对于这些辅助功能,onTouchListener
中的代码将不会被执行(next.setImageResource(R.drawable.layer\u bt\u next)
),因为视图永远不会被实际触摸,因此您的onTouch
代码不会运行。您必须执行以下任一操作:
onTouchListener
设置为打开的视图进行子类化,并覆盖performClick
以执行代码,或onClickListener
您只需在onTouchListener类中实现
onClickListener
,并从onTouchListener
手动调用onClick()
(您现在有view.performClick()
),然后将可执行代码移动到onClick
覆盖。您还必须在视图中同时设置onTouchListener
和onClickListener
。我不确定这是否与您看到的问题相同,但由于我发现此页面搜索我的问题,我想我应该添加我的经验来帮助其他人:)
在我的例子中,生成警告是因为可为null的视图可能是Void
类型。呼吁:
nullableView?.setOnTouchListener(this)
产生错误:
自定义视图Void已调用setOnTouchListener,但未覆盖performClick
在本例中,在设置侦听器之前执行空检查并强制转换到视图
,因为视图
将覆盖性能单击
:
if (nullableView != null) (nullableView as View).setOnTouchListener(this)
试着这样做:
next.setOnTouchListener(object : View.OnTouchListener {
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
when (event?.action) {
MotionEvent.ACTION_DOWN -> //Do Something
}
return v?.onTouchEvent(event) ?: true
}
})
你能用代码来举例吗?为了更好的理解。谢谢,对我来说没有任何意义。我有一些代码不能在onClick()上执行。这是一种长时间触摸的进度指示。可访问性并不重要。如果你不能触摸,你就不能使用它。也许我真的必须忽略这个警告。@TheincredibleJan-这个警告是为了可访问性的目的,所以如果这对您不重要或不相关,那么是的,您应该忽略它。将视图的子类转换为视图并不能真正解决问题,它只是愚弄了IDE。您需要重写
performClick()
在扩展targetView类型的自定义视图中。然后,在触摸屏下调用performClick()
event@exploitr这就是我们不希望看到的,我们不希望使用Java和EditText创建customviewIn AS 4.0,即使在onTouch listener方法中添加了对performClick的调用,警告仍然存在,至少在我自己的代码中是这样。我必须明确地抑制警告。你覆盖了谁的侦听器?为什么会有什么不同呢?看起来像是侥幸…没什么区别。它应该有用。确保您有适当的父项,而该父项不会覆盖OnTouchListener这是如何获得如此多的向上投票的?这没什么区别,对我来说根本没什么区别。我想也许安卓工作室已经更新了,并且一直在展示lintingerror@LeonardoRick添加@SuppressLint(“ClickableViewAccessibility”)后,该错误作为辅助功能警告消失了。请参考此解决方案