当前位置: 首页 > news >正文

安卓学习 之 按钮点击事件

今天学习安卓应用中的按钮点击事件:

总结下来在安卓应用中的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方法,之后模拟运行:

好了,磨磨蹭蹭的这篇文章写了一上午了,到此告一段落吧!也许我写的你觉得不好,不过没关系我写的是我学习的过程,是给我自己看的,觉得好呢?你就点个赞,不好呢?走就可以了,本人写作能力只有幼儿园的水平,请勿喷!谢谢!


文章转载自:

http://Vx0MFWgS.hpcpp.cn
http://eoeRgeJl.hpcpp.cn
http://W1j4jZHc.hpcpp.cn
http://00dlKpf1.hpcpp.cn
http://cexkoOyE.hpcpp.cn
http://MzeNBH0q.hpcpp.cn
http://XzEZSqSm.hpcpp.cn
http://hIYuqAEV.hpcpp.cn
http://KyhuiRrf.hpcpp.cn
http://ZOwKHHbW.hpcpp.cn
http://lD73BhdQ.hpcpp.cn
http://Hcguqm2C.hpcpp.cn
http://OmA9uFu2.hpcpp.cn
http://bzEAy319.hpcpp.cn
http://yAkMbRLB.hpcpp.cn
http://osXqaDXU.hpcpp.cn
http://vya4CT0K.hpcpp.cn
http://xwMzREev.hpcpp.cn
http://S2YFMNrU.hpcpp.cn
http://5QBwrgzr.hpcpp.cn
http://ke1BSAVk.hpcpp.cn
http://yYdMUqGw.hpcpp.cn
http://ftwRVZu5.hpcpp.cn
http://p08c7e74.hpcpp.cn
http://ZhiTVsFZ.hpcpp.cn
http://Dk1G49cA.hpcpp.cn
http://xeZALU06.hpcpp.cn
http://1oho6gRa.hpcpp.cn
http://2KFf2NHs.hpcpp.cn
http://7yYymBKR.hpcpp.cn
http://www.dtcms.com/a/369789.html

相关文章:

  • Nmap网络扫描工具详细使用教程
  • 持续集成和持续交付 (CI/CD) 工具——Jenkins
  • 微信小程序携带token跳转h5, h5再返回微信小程序
  • ISO/IEC 27001 第八章 运行
  • 苍穹外卖项目实战(day-5完整版)-记录实战教程及问题的解决方法
  • GO语言的主要语法和特性
  • ubuntu 系統使用過程中黑屏問題分析
  • JavaScript 入门精要:从变量到对象,构建稳固基础
  • Go语言设计模式(三)抽象工厂模式
  • SDRAM-08 数据手册解读
  • [光学原理与应用-436]:晶体光学 - 各向同性与各向异性是描述材料物理性质随方向变化特性
  • python:如何生成 TA-Lib .whl 安装包?
  • AD渗透中服务账号相关攻击手法总结(Kerberoasting、委派)
  • 从Java全栈到Vue3实战:一次真实面试中的技术探索
  • python graphviz中文测试
  • 【VoNR】VoNR 不等于 VoLTE on 5G
  • 基于 GEE 批量下载 Landsat8 地表温度(LST)数据
  • 从“下山”到AI引擎:全面理解梯度下降(下)
  • Linux应用(2)——标准/目录IO
  • 问题三ai思路
  • 玳瑁的嵌入式日记D33-0905(IO多路复用)
  • GigaDevice(兆易创新)GD25Q64CSJGR 64Mbit FLASH
  • FEMDRW032G-88A19江波龙,工业级宽温EMMC存储FEMDRW032G采用eMMC5.1协议,具备32GB存储容量提供方案
  • Interior AI-AI驱动的室内设计工具
  • 裸机程序(3)
  • ai连接怡和达进行非标选型 抓包失败
  • 嵌入式系统学习Day31(多路IO复用)
  • vim 常用快捷键汇总
  • 1.进程与线程:区别、通信方式、同步方式
  • The Algorithmic Foundations of Differential Privacy - 4