1、自定义内部类

2、匿名内部类

3、当前activity去实现事件接口

4、在布局文件xml中添加点击事件属性(使用频率非常高)

补充:

a、Android 在xml文件中 给某个控件声明 id 是: "@+/自定义名字" ,

获取是: "@/自定义的名字" , 例如: android:id="@id/btn1", 文本 android:text="@string/long_text" ,图片等。

b、安卓的View 的继承关系:

安卓的View继承关系.png

1、自定义内部类 MyClickListener

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 1、获取按钮(自定义内部类)

Button btn = findViewById(R.id.btn1); // 通过 findViewById 去找索引

// 2、注册按钮

MyClickListener mclick1 = new MyClickListener();

btn.setOnClickListener(mclick1);

}

// 3、内部类 -- 点击事件触发

class MyClickListener implements View.OnClickListener {

@Override

public void onClick(View view) {

Log.e("tag","点击了......");

}

}

xml文件

android:id="@+id/btn1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="按钮点击事件">

2、匿名内部类(就是 生成对象的时候才知道是什么类名)

做参数 传参的时候 new Xxxxclass 就是匿名对象了。

Button btn2 = findViewById(R.id.btn1);

btn2.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Log.e("Tag","通过匿名内部类实现按钮点击");

}

});

3、当前activity去实现事件接口

自己写个接口,根据1中的“自定义内部类” 思想,我们可以看到只要是一个类都是可以 执行(implements)一个接口。那么为何自己的类 使用不是更好吗?是的,开工,跟着我实现这个接口吧。

// implements View.OnClickListener 是自己添加的 要实现的接口

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 定义一个按钮

Button btn3 = findViewById(R.id.btn1);

btn3.setOnClickListener(this);// this 指当前类

}

@Override

public void onClick(View view) {

Log.e("TAG","使用本类实现了OnClickListener");

}

}

4、在布局文件xml中添加点击事件属性

xml文件是这样 --- 推荐给个ID

android:id="@+id/btn4"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="在xml文件中绑定事件"

android:onClick="myAction"/>

android:id="@+id/btn5"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="在xml文件中绑定事件"

android:onClick="myAction"/>

//参数:被点击的控件对象 View

public void myAction(View v){

switch (v.getId()){

case R.id.btn4:

Log.e("TAG","通过xml绑定点击事件 btn4");

break;

case R.id.btn5:

Log.e("TAG","通过xml绑定点击事件 btn5");

break;

}

}

demo效果:

最后一种经常使用.jpeg

疑惑?

为什么click里边都是 onClick(View view),我点击的是Button呀!

答:上面给了个View的继承关系,button也是继承View的。因为点击事件并不仅仅Button才有事件,其它UI控件也要,所以使用View更加合适。

总结:

1、如果多个按钮(点击事件)的操作差不多就使用自定义,可以减少代码,更加简洁。

2、如果某个按钮的事件是唯一的,那么使用 匿名内部类吧。(没有绝对,只有更好)

3、xml中绑定事件 经常使用。

android xml事件,安卓事件相关推荐

  1. Android进阶知识:事件分发与滑动冲突(一)

    1.前言 Android学习一段时间,需求做多了必然会遇到滑动冲突问题,比如在一个ScrollView中要嵌套一个地图View,这时候触摸移动地图或者放大缩小地图就会变得不太准确甚至没有反应,这就是遇 ...

  2. android动态监听事件,Android-常见的事件监听

    在Android的开发中,我们会遇到各种各样的事件监听.下面给大家分享一下,希望对Android感兴趣的小伙伴有帮助. Android常见的事件监听 单击事件onClickListener 长按事件o ...

  3. 安卓事件机制与页面跳转

    昨天学习了安卓开发中实现点击一个按钮实现页面的跳转. 首先点击一个按钮就会触发动作,这里就是给按钮加监听.一般对于事件监听,我们需要了解以下三类对象:事件源.事件.事件监听器,一般在安卓里,事件源就是 ...

  4. 一个小Demo带你理解安卓事件分发

    安卓事件分发是个老生常谈的话题, 在ScrollView高度测量原理介绍Android View测量原理, 现在再用个实例讲解事件分发原理. 本文要搞懂2个问题. 1. 事件是怎么产生的? 2.事件是 ...

  5. Android ViewGroup拦截触摸事件详解

    前言 在自定义ViewGroup中,有时候需要实现触摸事件拦截,比如ListView下拉刷新就是典型的触摸事件拦截的例子.触摸事件拦截就是在触摸事件被parent view拦截,而不会分发给其chil ...

  6. [Android]手动触发OnClick事件

    一.实现代码 1.1 将下面代码写在类中,注意不是方法内部!     OnClickListener OnClickEvent = new OnClickListener(){             ...

  7. Android中的Touch事件

    Android中的Touch事件处理 主要内容 Activity或View类的onTouchEvent()回调函数会接收到touch事件. 一个完整的手势是从ACTION_DOWN开始,到ACTION ...

  8. Android中使用EventBus事件发布/订阅框架实现事件传递

    场景 EventBus EventBus是一种用于Android的事件发布-订阅总线.它简化了应用程序内各个组件之间进行通信的复杂度,尤其是碎片之间进行通信的问题,可以避免由于使用广播通信而带来的诸多 ...

  9. android鼠标滚轮事件坐标,android 处理鼠标滚轮事件 【转】

    android处理鼠标滚轮事件,并不是如下函数: 1)  public boolean onKeyDown(int keyCode, KeyEvent event) 2)     public boo ...

最新文章

  1. JavaSE基础复习总结
  2. 大家都说 Java 反射效率低,你知道原因在哪里么
  3. socket网络编程-字典
  4. 计算机视觉实战(十五)背景建模 (附完整代码)
  5. flex转html5插件,Flexbox使用向导-flex元素排列顺序
  6. 物质的粒子应该是空心的
  7. 常用编程语言简介大全
  8. 宝塔面板无法安装php,宝塔面板安装php失败
  9. 传奇源码分析---框架
  10. 如何添加网络打印机-查看IP地址就可以
  11. 中国石油大学(华东)计算机/软件考研经验分享
  12. 软件体系结构期末考试总结
  13. terraria泰拉瑞亚
  14. 一个指针占几个字节?原理是什么呢?
  15. 26个顶尖战略咨询公司常用分析模型详解!
  16. 红楼梦人物出场统计python_红楼梦有多少人物统计(一)
  17. 使用google浏览器添加并翻译英文无字幕视频
  18. Android设备支持USB转RJ45有线网卡( 沐阳网卡JP1081B/9700)
  19. C4D插件:阿诺德Arnold渲染器 (R20-2023版本合集)
  20. 介个森田玻尿酸复合面膜也太好用了叭

热门文章

  1. Halcon阈值分割方法简析
  2. c++ lambda函数_C++11 之 lambda函数的详细使用
  3. PHP 实例 - AJAX RSS 阅读器
  4. 测试对bug如何分析和定位
  5. 内容拾遗之字符串与数据结构
  6. HDU 2243 考研路茫茫——单词情结 求长度小于等于L的通路总数的方法
  7. 一个App完成入门篇(五)- 完成新闻页面
  8. ReflectionClass与Closure
  9. iOS Block全面分析
  10. javascript编程风格(粗略笔记)