Android中为Button控件添加点击事件的方式
这里用三个按钮分别演示三个不同的方式实现按钮的点击事件
)
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<Button
android:id="@+id/btn01"
android:layout_width="200dp"
android:layout_height="100dp"
android:text="Button01"
android:textSize="30sp"
/>
<Button
android:id="@+id/btn02"
android:layout_width="200dp"
android:layout_height="100dp"
android:text="Button02"
android:textSize="30sp"
/>
<Button
android:id="@+id/btn03"
android:layout_width="200dp"
android:layout_height="100dp"
android:text="Button03"
android:textSize="30sp"
/>
</LinearLayout>
在MainActivity.java中写入代码,声明两个按钮变量,再获取每个按钮
因为通过方法二的话不需要声明变量即可实现所以这里我们不声明按钮2
public class MainActivity extends AppCompatActivity {
//声明变量
Button btn01;
Button btn03;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过控件的id找到相应的按钮
btn01 = findViewById(R.id.btn01);
btn03 = findViewById(R.id.btn03);
}
}
方法一,匿名内部类的方式
(1)用匿名类实现监听方法。
public class MainActivity extends AppCompatActivity {
//声明变量
Button btn01;
Button btn03;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过控件的id找到相应的按钮
btn01 = findViewById(R.id.btn01);
btn03 = findViewById(R.id.btn03);
//用匿名内部类方式实现监听方法
btn01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"你点击了按钮1",Toast.LENGTH_SHORT).show();
}
});
}
onClick()方法中为具体的点击事件
方法二,指定Button控件的属性android:onClick=“方法名”
(1)先在布局文件里button控件加上android:onClick="方法名"
例如例如给按钮2控件加上android:onClick="clickBtn2"
<Button
android:id="@+id/btn02"
android:layout_width="200dp"
android:layout_height="100dp"
android:text="Button02"
android:textSize="30sp"
android:onClick="clickBtn2"
/>
(2)MainActivity.java中的对应点击事件的方法名要与onClick的属性值一致,也就是方法名为clickBtn2
public class MainActivity extends AppCompatActivity {
//声明变量
Button btn01;
Button btn03;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过控件的id找到相应的按钮
btn01 = findViewById(R.id.btn01);
btn03 = findViewById(R.id.btn03);
}
//用控件onClick的属性值作为按钮2点击事件的方法名
public void clickBtn2(View v){
Toast.makeText(MainActivity.this,"你点击了按钮2",Toast.LENGTH_SHORT).show();
}
}
这里可以看到按钮2不需要声明Button变量,而是直接声明一个方法,该方法名跟布局中android:onClick="clickBtn2"属性值一致,并且传一个View参数就可以了。事件的具体内容就在这个方法中写。
方法三,Activity实现View.OnClickListener接口的方式设置点击事件
(1)将当前Activity实现View.OnClickListener接口,并实现该接口中的onClick() 方法即可为button控件添加点击事件,以按钮3为例
//1、实现View.OnClickListener接口
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btn01;
//2.声明变量
Button btn03;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn01 = findViewById(R.id.btn01);
//3.通过id找到相应的控件
btn03 = findViewById(R.id.btn03);
//4.为按钮3注册监听,否则button控件的点击不会生效
btn03.setOnClickListener(this);
}
//5.实现接口中的onClick方法
public void onClick(View v) {
Toast.makeText(MainActivity.this,"你点击了按钮3",Toast.LENGTH_SHORT).show();
}
}
通过这个方式给按钮添加点击事件的话不需要给布局中的Button控件加onClick属性
这里注意,当你第一步实习监听接口时,你可能会看到像这样的报错
那是因为实现接口必须要实现借口中的方法,但这个时候我们只是实现接口,没实现方法所以会报错
我们只需要按alt+enter键,出现这个
然后选择onClick方法即可快速实现这个方法
这样报错就消失了,并帮你自动生成这个方法,如图
这里可以多个按钮共用一个onClick方法,只要每个按钮都注册了监听,那如何分辨是点击了哪个按钮所触发的点击事件呢,可以在onClick方法里用switch语句通过不同按钮的id(v.getId()即可获得)分情况处理即可。