Android: onTouchEvent() 和 onClick 事件
Android: onTouchEvent() and onClick events
我有一个项目,我在其中覆盖了 onTouchEvent() 并注册了点击并在其中移动。我在屏幕上也有按钮。我正在尝试将方法连接到按钮,即:
public void onButtonClick(View view) {
System.out.println("Here");
}
我可以将方法连接到按钮,连接出现在xml:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onButtonClick"
android:text="Button"
tools:layout_editor_absoluteX="89dp"
tools:layout_editor_absoluteY="139dp" />
但是按钮点击好像没有被注册。是不是因为我也覆盖了 onTouchEvent()?如果是这样,我应该通过 MotionEvents 注册点击吗?如果是这样,区分来自多个按钮的点击的简洁方法是什么?
But the button click does not appear to be registered. Is it because
I'm also overriding onTouchEvent()?
是的。当onTouch()
方法returns true
时,Android会认为事件已经被消费,不会将它传递给其他各种触摸处理程序(我认为它包括onClickListener
).
If so should I be registering clicks through MotionEvents?
你可以的。或者根据您的情况,只需从方法中 return false
并让 onClickListener 完成工作。
If so, what's a clean way to differentiate clicks coming from
multiple buttons?
onTouch(final View v, final MotionEvent event)
如您所见,onTouch() 方法将 View
类型作为参数。您可以通过获取 v.getId()
来检查视图的 ID,并将此 ID 与您期望的 Button 的 ID 进行比较。您可以进行如下操作:
@Override
public boolean onTouch(final View v, final MotionEvent event) {
if(v.getId()==R.id.button1){
//Click is coming from Button with id button1 (specified in layout.xml as android:id="@+id/button1").
//Do something for click
}
...
}
我有一个项目,我在其中覆盖了 onTouchEvent() 并注册了点击并在其中移动。我在屏幕上也有按钮。我正在尝试将方法连接到按钮,即:
public void onButtonClick(View view) {
System.out.println("Here");
}
我可以将方法连接到按钮,连接出现在xml:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onButtonClick"
android:text="Button"
tools:layout_editor_absoluteX="89dp"
tools:layout_editor_absoluteY="139dp" />
但是按钮点击好像没有被注册。是不是因为我也覆盖了 onTouchEvent()?如果是这样,我应该通过 MotionEvents 注册点击吗?如果是这样,区分来自多个按钮的点击的简洁方法是什么?
But the button click does not appear to be registered. Is it because I'm also overriding onTouchEvent()?
是的。当onTouch()
方法returns true
时,Android会认为事件已经被消费,不会将它传递给其他各种触摸处理程序(我认为它包括onClickListener
).
If so should I be registering clicks through MotionEvents?
你可以的。或者根据您的情况,只需从方法中 return false
并让 onClickListener 完成工作。
If so, what's a clean way to differentiate clicks coming from multiple buttons?
onTouch(final View v, final MotionEvent event)
如您所见,onTouch() 方法将 View
类型作为参数。您可以通过获取 v.getId()
来检查视图的 ID,并将此 ID 与您期望的 Button 的 ID 进行比较。您可以进行如下操作:
@Override
public boolean onTouch(final View v, final MotionEvent event) {
if(v.getId()==R.id.button1){
//Click is coming from Button with id button1 (specified in layout.xml as android:id="@+id/button1").
//Do something for click
}
...
}