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