Android控件——监听按钮的点击事件
1.实现方式
匿名内部类的实现
独立类的实现
实现接口的方式
------------------------匿名内部类的实现----------------------------------------
1. xml布局文件定义按钮
2.Java中获取按钮并绑定点击事件
package com.example.mooc; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private Button login_button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 将布局文件引入到Activity setContentView(R.layout.button_imgbutton); /** * 1. 初始化一个按钮,通过this.findViewById(R.id.button1) * 原理:通过R.java中的唯一id查找到的都是view,强制转换为一个button * * 2.设置button的监听器,通过监听器实现点击效果 */ login_button = (Button) this.findViewById(R.id.button1); /** * 匿名内部类实现 */ login_button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub System.out.println("这是点击事件"); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
3.运行测试:(点击登录按钮)
注意:安卓中的System.out.print会在logcat中打印。
------------------------外部类的实现---------------------------------------
将按钮的公共处理逻辑写到外部类中,然后设置事件监听器的时候写一个外部类调用其公共逻辑并写上单独处理的逻辑
Toast.makeText(MainActivity.this, "图片按钮被点击", 1).show();//弹出一个类似于消息框的窗口。
arg0.setAlpha(0.5f); // 透明度为0-1的float(设置透明度)
package com.example.mooc; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageButton; import android.widget.Toast; public class MainActivity extends Activity { private Button login_button; private ImageButton img_button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 将布局文件引入到Activity setContentView(R.layout.button_imgbutton); /** * 1. 初始化一个按钮,通过this.findViewById(R.id.button1) * 原理:通过R.java中的唯一id查找到的都是view,强制转换为一个button * * 2.设置button的监听器,通过监听器实现点击效果 */ login_button = (Button) this.findViewById(R.id.button1); /** * 外部类实现 */ login_button.setOnClickListener(new MyOnClicker() { @Override public void onClick(View arg0) { super.onClick(arg0); Toast.makeText(MainActivity.this, "登录按钮被点击", 1).show(); } }); img_button = (ImageButton) findViewById(R.id.imageButton1); img_button.setOnClickListener(new MyOnClicker() { @Override public void onClick(View arg0) { super.onClick(arg0); Toast.makeText(MainActivity.this, "图片按钮被点击", 1).show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } class MyOnClicker implements OnClickListener { @Override public void onClick(View arg0) { // TODO Auto-generated method stub // 让所有当前外部类的点击事件的按钮都作出同样的动作,例如改变button的透明度 arg0.setAlpha(0.5f); // 透明度为0-1的float } }
效果:
------------------------接口方式的实现---------------------------------------
1.mainAcvitity实现OnClickListener接口
2.重写onclick方法
打印日志,可以设置过滤器查看
@Override public void onClick(View arg0) { // TODO Auto-generated method stub Log.i("tag", "这是第三种方式"); }
3.绑定事件
login_button = (Button) this.findViewById(R.id.button1); img_button = (ImageButton) findViewById(R.id.imageButton1); // 第三种实现方式: login_button.setOnClickListener(this); img_button.setOnClickListener(this);
4.运行效果:
点击后查看logcat
过滤器的设置
这样就只会显示tag的消息。
----------------------------------标签绑定的实现(结合自定义组件)-----------------------------------
package com.example.test2; import android.content.Context; import android.util.AttributeSet; import android.widget.Button; public class MyButton extends Button { public MyButton(Context context) { super(context); // TODO Auto-generated constructor stub } public MyButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public MyButton(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } }
布局文件:(绑定onclick事件)
<com.example.test2.MyButton android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clickButton" android:text="标签" />
编写事件(MainActivity与自定义组件均可)
public void clickButton(View view){ // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "这是第四种方式", 1).show(); }
【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】
分类:
Android
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了