安卓学习 之 按钮点击事件
今天学习安卓应用中的按钮点击事件:
总结下来在安卓应用中的Button注册点击事件的方法主要是以下4种方法,稍后会逐个介绍:
第一种方法:自定义内部类的方法
第二种方法:匿名内部类的方法
第三种方法:当前Activity去实现事件接口的方法
第四种方法:在布局文件中添加点击事件属性的方法
首先新建一个Activity文件:
然后把一起自动生成的activity_button.xml文件中的最外层布局更改为线性布局
android:orientation="vertical" 是用于 线性布局(LinearLayout) 的一个核心属性,它决定了该布局内所有子视图(子控件)的排列方向
然后添加4个按钮控件:
下面来介绍第一种方法 自定义内部类的方法:
首先在第一个按钮中添加一个id为:btn1
然后在ButtonActivity.java文件中书写代码:
package com.example.android1;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.util.Log;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class ButtonActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_button);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});Button btn1 = findViewById(R.id.btn1); //创建一个按钮类型的变量btn1 存放的是id为btn1的控件//点击事件,被点击是触发的事件//整体语法结构:// [类型] [变量名] = new [构造函数];Myclick mck = new Myclick(); //创建了一个名为 mck 的变量,它的类型是 Myclick 类,然后使用 new 关键字实例化(创建)了一个 Myclick 类的对象,并将这个对象赋值给变量 mckbtn1.setOnClickListener(mck); //为按钮注册点击事件监听器}// 1 class Java/Kotlin 中声明类的关键字。// 2 Myclick 类的名称。遵循大驼峰命名法(CamelCase),是您自己定义的标识符。// 3 implements Java 中表示实现一个接口的关键字。(在 Kotlin 中使用 :)// 4 View.OnClickListener 要实现的接口的全限定名。View 是安卓的视图类,OnClickListener 是定义在 View 类内部的接口。//整体语法结构://[访问修饰符] class [类名] implements [接口名]//声明了一个名为 Myclick 的类,这个类实现了 View.OnClickListener 接口。这意味着 Myclick 类承诺将提供 OnClickListener 接口中定义的 onClick 方法的具体实现,从而成为一个可以处理按钮等视图点击事件的“点击监听器”。class Myclick implements View.OnClickListener{@Override //这是一个给编译器看的“保证书”,保证下面的 onClick 方法是正确重写了接口中的方法,不是我自己随便写的新方法。 //编译器指令:我在重写接口的方法 确保正确重写,避免错误public void onClick(View view) { //这是声明方法的规则,表示“当点击事件发生时,我会被调用,并且我会知道是哪个View被点击了”。 //方法声明:定义如何处理点击事件 实现接口契约,接收被点击的视图//在控制台输出语句Log.e("tag","通过自定义内部类实现点击事件的按钮被点击了");}}
}
最后修改注册文件:
都写完之后点击模拟如果有没有导入的情况就按照下面的方法来处理:
接下来就是模拟看日志输出了:
第二种方法:匿名内部类的方法
首先为第二个按钮添加一个id:btn2:
然后在ButtonActivity.java文件中添加代码:
所有的代码如下:
package com.example.android1;import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;import android.util.Log;
import android.widget.Button;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class ButtonActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_button);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});Button btn1 = findViewById(R.id.btn1); //创建一个按钮类型的变量btn1 存放的是id为btn1的控件//点击事件,被点击是触发的事件//整体语法结构:// [类型] [变量名] = new [构造函数];Myclick mck = new Myclick(); //创建了一个名为 mck 的变量,它的类型是 Myclick 类,然后使用 new 关键字实例化(创建)了一个 Myclick 类的对象,并将这个对象赋值给变量 mckbtn1.setOnClickListener(mck); //为按钮注册点击事件监听器//下面是第二种方法的实现:通过匿名内部类实现点击事件Button btn2=findViewById(R.id.btn2);btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Log.e("tag", "通过匿名内部类实现点击事件");}});}// 1 class Java/Kotlin 中声明类的关键字。// 2 Myclick 类的名称。遵循大驼峰命名法(CamelCase),是您自己定义的标识符。// 3 implements Java 中表示实现一个接口的关键字。(在 Kotlin 中使用 :)// 4 View.OnClickListener 要实现的接口的全限定名。View 是安卓的视图类,OnClickListener 是定义在 View 类内部的接口。//整体语法结构://[访问修饰符] class [类名] implements [接口名]//声明了一个名为 Myclick 的类,这个类实现了 View.OnClickListener 接口。这意味着 Myclick 类承诺将提供 OnClickListener 接口中定义的 onClick 方法的具体实现,从而成为一个可以处理按钮等视图点击事件的“点击监听器”。class Myclick implements View.OnClickListener{@Override //这是一个给编译器看的“保证书”,保证下面的 onClick 方法是正确重写了接口中的方法,不是我自己随便写的新方法。 //编译器指令:我在重写接口的方法 确保正确重写,避免错误public void onClick(View view) { //这是声明方法的规则,表示“当点击事件发生时,我会被调用,并且我会知道是哪个View被点击了”。 //方法声明:定义如何处理点击事件 实现接口契约,接收被点击的视图//在控制台输出语句Log.e("tag","通过自定义内部类实现点击事件的按钮被点击了");}}
}
最后模拟运行,看运行效果:
第三种方法:当前Activity去实现事件接口的方法
首先添加语句:
按照上图的方法点击,接着在点击下图的顺序自动填好要用的点击方法:
按照以上方法自动填充代码:
在里面写点击后的动作就好了:
整体代码如下:
package com.example.android1;import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;import android.util.Log;
import android.widget.Button;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class ButtonActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_button);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});Button btn1 = findViewById(R.id.btn1); //创建一个按钮类型的变量btn1 存放的是id为btn1的控件//点击事件,被点击是触发的事件//整体语法结构:// [类型] [变量名] = new [构造函数];Myclick mck = new Myclick(); //创建了一个名为 mck 的变量,它的类型是 Myclick 类,然后使用 new 关键字实例化(创建)了一个 Myclick 类的对象,并将这个对象赋值给变量 mckbtn1.setOnClickListener(mck); //为按钮注册点击事件监听器//下面是第二种方法的实现:通过匿名内部类实现点击事件Button btn2=findViewById(R.id.btn2);btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Log.e("tag", "通过匿名内部类实现点击事件");}});// 第三种方法:通过当前Activity实现点击事件接口Button btn3 = findViewById(R.id.btn3);btn3.setOnClickListener(this);}@Overridepublic void onClick(View view) {Log.e("tag", "通过当前Activity实现点击事件接口");}// 1 class Java/Kotlin 中声明类的关键字。// 2 Myclick 类的名称。遵循大驼峰命名法(CamelCase),是您自己定义的标识符。// 3 implements Java 中表示实现一个接口的关键字。(在 Kotlin 中使用 :)// 4 View.OnClickListener 要实现的接口的全限定名。View 是安卓的视图类,OnClickListener 是定义在 View 类内部的接口。//整体语法结构://[访问修饰符] class [类名] implements [接口名]//声明了一个名为 Myclick 的类,这个类实现了 View.OnClickListener 接口。这意味着 Myclick 类承诺将提供 OnClickListener 接口中定义的 onClick 方法的具体实现,从而成为一个可以处理按钮等视图点击事件的“点击监听器”。class Myclick implements View.OnClickListener{@Override //这是一个给编译器看的“保证书”,保证下面的 onClick 方法是正确重写了接口中的方法,不是我自己随便写的新方法。 //编译器指令:我在重写接口的方法 确保正确重写,避免错误public void onClick(View view) { //这是声明方法的规则,表示“当点击事件发生时,我会被调用,并且我会知道是哪个View被点击了”。 //方法声明:定义如何处理点击事件 实现接口契约,接收被点击的视图//在控制台输出语句Log.e("tag","通过自定义内部类实现点击事件的按钮被点击了");}}
}
最后就是模拟运行的结果了:
第四种方法:在布局文件中添加点击事件属性的方法
在布局文件中为第四个按钮添加一个属性叫onclick为其添加一个值为myclick(自定义的方法名)
然后在ButtonActivity.java文件中写布局文件中按钮绑定的方法,之后就可以模拟测试了:
第四种方法还可以绑定多个按钮,进入同一个方法内进行处理:
首先就是在布局中再添加一个按钮都要有id属性啊,绑定的都是同一种方法,具体是哪个按钮点击的就要去方法里面去分辨了:
然后在ButtonActivity.java中写myclick方法,之后模拟运行:
好了,磨磨蹭蹭的这篇文章写了一上午了,到此告一段落吧!也许我写的你觉得不好,不过没关系我写的是我学习的过程,是给我自己看的,觉得好呢?你就点个赞,不好呢?走就可以了,本人写作能力只有幼儿园的水平,请勿喷!谢谢!