Android中为button控件添加点击事件的方式

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()即可获得)分情况处理即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值