Android按钮事件响应顺序
在一个按钮响应用户的动作时,有一定的顺序,而且, 同事绑定view和button的点击事件,button子类的点击事件会覆盖父类view的响应事件。
下面是一个例子:
package xueyou.xueyoucto.com.androidviews;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private final String Tag = "MAINACTIVITY";
public View view;
public Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view = this.findViewById(R.id.mainRelativeLayout);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "click me", Toast.LENGTH_SHORT).show();
}
});
button = (Button)this.findViewById(R.id.button);
//这样是先执行OnTouch再执行OnClick事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "按钮被单击", Toast.LENGTH_SHORT).show();
}
});
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Toast.makeText(MainActivity.this, "按钮被触摸", Toast.LENGTH_SHORT).show();
return false;
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="xueyou.xueyoucto.com.androidviews.MainActivity"
android:id="@+id/mainRelativeLayout">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:id="@+id/button"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="78dp"
android:layout_marginStart="78dp"
android:layout_marginTop="110dp" />
</RelativeLayout>
点击按钮是,先弹出OnTouch事件,在进行Onclick事件,不会响应view的onclick事件。
单独点击view 的时候,会响应view的onClick事件。