Button在程序开发中是一个必不可少的控件,用来响应用户的一系列点击事件,在Android中处理按钮点击事件的方式有以下几种。
(一)在布局文件中指定按钮的onClick属性
在布局文件中指定按钮的onClick属性,然后在Activity文件中编写相应的方法,应当注意的是onClick属性的值与Activity代码中定义的方法名必须保持一致。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮"
android:onClick="btnClick"/>
</LinearLayout>
以上布局文件中定义了一个Button,并添加其onClick属性值为btnClick,然后在Activity文件中定义以View对象为参数的方法
public class MainActivity extends AppCompatActivity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=findViewById(R.id.btn1);
}
public void btnClick(View view){
btn.setText("此按钮已被点击");
}
}
(二)使用匿名内部类
布局文件中取消Button的onClick属性设置
在使用setOnClickListener()方法对按钮进行监听时,创建内部类对点击事件进行监听。
public class MainActivity extends AppCompatActivity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=findViewById(R.id.btn1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
btn.setText("此按钮被点击");
}
});
}
}
(三)在当前Activity中实现OnClickListener接口
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.btn1);
btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
btn.setText("此按钮被点击");
}
}
(四)在当前Activity中创建一个实现OnClickListener接口的内部类
public class MainActivity extends AppCompatActivity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.btn1);
btn.setOnClickListener(new MyButton());
}
class MyButton implements View.OnClickListener{
@Override
public void onClick(View view) {
btn.setText("此按钮被点击");
}
}
}
在上述代码中,在MainActivity类中创建了一个名为MyButton的内部类,实现OnClickListener接口并重写onClick方法。之后为按钮设置setOnClickListener(Listener listener)属性,在参数中传入创建好的内部类对象,当点击按钮时会自动触发内部类MyButton的onClick()方法调用事件逻辑
(五)创建一个实现OnClickListener接口的外部类
public class MainActivity extends AppCompatActivity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.btn1);
btn.setOnClickListener(new MyButton(btn));
}
}
class MyButton implements View.OnClickListener{
Button myBtn;
MyButton(Button button){
this.myBtn=button;
}
@Override
public void onClick(View view) {
myBtn.setText("此按钮被点击");
}
}
在上述代码中,在MainActivity类后,创建了一个名为MyButton的内部类,实现OnClickListener接口并重写onClick方法,同时编写一个构造函数来传递Button对象。之后为按钮设置setOnClickListener(Listener listener)属性,在参数中传入创建好的外部类对象。
也可以在MyButton类中编写一个setter方法传参:
public class MainActivity extends AppCompatActivity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = findViewById(R.id.btn1);
MyButton myButton=new MyButton();
btn.setOnClickListener(myButton);
myButton.setButton(btn);
}
}
class MyButton implements View.OnClickListener{
Button myBtn;
public void setButton(Button button){
this.myBtn=button;
}
@Override
public void onClick(View view) {
myBtn.setText("此按钮被点击");
}
}