在 Android 的图形界面(UI)开发中,有两个非常重要的内容∶一个是控件的布局,另个就是控件的事件处理。Android中的常用事件有点击事件、长按事件、触摸事件、焦点事件、按键事件—下拉列表的选中事件、单选按钮的改变事性等。对于事件的处理,基本上可以总结为 3 个步骤∶

步骤一: 获取触发事件的对象,比如点击了一个 Button,如果要对这个点击事件进行处理,就需要获取 Button 的对象。

步骤二:实现一个对应的事件处理接口。每个事件都有对应的事件处理接口,在事件处理中必须要实现事件处理接口,同时要实现其中的事件处理方法。在一个事件处理接口的实现类中可以处理多个事件。

步骤三: 用获取的控件对象调用该控件的某个事件监听方法,将第二步实现的接口类的对象作为参数传入,并对该事件进行注册。

点击事件

点击事件,顾名思义就是点击了某个控件而触发的事件。点击事件常见于 Button 按钮,当然,TextView、ImageView 等控件中也有使用。另外,布局管理器(如LinearLayout等)也是可以有点击事件的、下面将以 Button与TextView 为实例来进行讲解。

Activity 对应的布局文件代码∶

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
<Button
        android:id="@+id/button_click"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="点击button按钮"/>
 <TextView
        android:id="@+id/text_click"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="点击textView"/>
</LinearLayout>

MainActivity中处理的代码:

就像前面所说的分3步来处理事件∶第一步使用 findViewByld()方法获取 Button 按钮的对象;第二步让 Activity 实现点击事件的处理接口 View.OnClickListener,并实现 onClickO)方法,在此方法中响应具体的点击事件;第三步调用 setOnClickListener()点击事件的监听方法,并将 View.OnClickListener 接口实现类的对象传入(实例中是用 Activity 实现的,所以传入了 this对象)。

对点击事件的处理都是要在 onClick()方法中进行编写的,实例在点击之后弹出一个 Toast进行提示。如果只有一个点击事件,就可以直接在方法内编写响应程序,但是当实例中有两个(或多个)需要进行处理的点击事件时则需要使用一个 switch 根据它们的 id 进行判断。在第三步调用 setOnClickListener()方法时,系统会对 View 进行注册,所以在 onClick()方法中可以从 view.getId()方法获取对应的 View 控件的 id。

运行程序,点击 Button 按钮的效果如下图所示:

点击Button运行效果

点击TextView运行效果

其实,在处理点击事件时,实现事件处理接口的方式有 3 种,实例中的处理方式是在实际开发中最常用的。下面简单介绍其他两种方式。

(1)匿名内部类的方式

直接在控件对象调用 setOnClickListener(O方法时以匿名内部类的方式传入事件处理接口的对象。修改MainActivity的代码如下:

使用这种方式就需要在Button按钮和TextView中都这样处理。如果不是两个,同时需要的点击事件特别多,就会使得代码冗余,让 initView()方法过于庞大,同时可读性降低。选择使用实例中的方法就会显得很清晰,同时代码简洁、可读。当然,如果需要处理的事件只有一个或者几个的话,使用此种方式会相当简单。只是在真正的开发中只有一个事件需要处理的情况相对较少,所以实例中的处理方式才是应用最广泛的。

(2)内部类的方式

这种方式和匿名内部类方式不同的是,它选择在 Activity 内部创建一个内部类,并在内部类内实现 onClick(View view)方法。修改MainActivity代码如下:

使用这种方式,和实例中的方式并无区别,只是一个用 Activity 实现了事件处理接口,一个使用了内部类的方式。当然,也可以用普通类的方式,和内部类效果一样,但是在代码的内聚性上会大打折扣。当然如果遇到的工程相对复杂,那么为了解耦有时也会使用普通类的方式,不过非常少见。

只有理解了上面 3 种实现事件处理接口的方式,在开发中才能根据需要选择不同的方式。其实,不只是点击事件,其他事件实现事件处理接口也是同样的。

Android中的事件处理之点击事件相关推荐

  1. android webview 自动点击事件,Android中的WebView布局点击事件的方法

    继承WebView自定义一个MyWebView,然后重载它的onTouchEvent方法,就可以解决了. public class MyWebView extends WebView{ public ...

  2. Android菜鸟的成长笔记(11)——Android中的事件处理

    原文: [置顶] Android菜鸟的成长笔记(11)--Android中的事件处理 Android提供了两种方式来处理事件,一个是基于回调的事件处理,另一个是基于监听的事件处理,举个例子: 基于回调 ...

  3. Android中的事件处理总结

    Android中的事件处理总结 Android系统对动作做出的响应机制就是事件处理.Android提供了两种事件处理机制. 基于监听的事件处理机制 基于回调的事件处理机制 一.基于监听的事件处理机制 ...

  4. android通知栏的点击事件,Android监听消息通知栏点击事件

    Android监听消息通知栏点击事件 使用BroadCastReceiver 1 新建一个NotificationClickReceiver 类,并且在清单文件中注册!! public class N ...

  5. Android 动态添加标签及其点击事件

    在做Android开发的时候,会遇到动态添加标签让用户选择的功能,所以自己写了个例子,运行效果图如下. 标签可以左右滑动进行选择,点击的时候,会弹出toast提示选择或者取消选择了哪个标签.通过动态添 ...

  6. iostext添加点击事件_iOS开发小技巧 - label中的文字添加点击事件

    Label中的文字添加点击事件 以前老师讲过类似的功能,自己懒得回头看了,找了很多第三方的,感觉这个小巧便利,作者只是扩展了分类,实现起来代码也少.先来个效果图 自己的项目,直接上代码 - (void ...

  7. Android在WebView中给图片设置点击事件

    好久没有更新博客了,今天来个小知识点.我们知道在WebView中加载的是Html也面,在开发中都是Web前端人员写好以后给个链接我们去用webView进行loadUrl.但是有时突然产品想让你把加载回 ...

  8. Android 中Touch(触屏)事件传递机制

    版本:2.0 日期:2014.3.21 2014.3.29 版权:© 2014 kince 转载注明出处 一.基本概念 在实际开发中,经常会遇到与触屏事件有关的问题,最典型的一个就是滑动冲突.比如在使 ...

  9. Android中的事件处理研究

    处理用户界面事件Handling UI Events 在Android上,不止一个途径来侦听用户和应用程序之间交互的事件.对于用户界面里的事件,侦听方法就是从与用户交互的特定视图对象截获这些事件.视图 ...

最新文章

  1. Chapter 2 Open Book——29
  2. 二十四、死锁的处理策略---检测和解除
  3. 你知道吗?Workspot属于二级VDI平台?
  4. -i 可以编译添加多个_大咖说 | 基于 NXP i.MX8 eIQ 环境搭建和编译
  5. jquery datatable的详细用法
  6. web容器(02):tomcat配置监控
  7. qq收不到oracle邮件,腾讯企业邮箱发送邮件失败
  8. 【转载】浅谈 看图软件 的设计与实现
  9. 手动安装lzop压缩工具 - JerryMo06的专栏 - 博客频道 - CSDN.NET
  10. OpenGL ES 加载3D模型
  11. Cglib 如何实现多重代理?
  12. 数据迁移其实是很难的
  13. 树莓派_360wifi2_佳能MP236打印机
  14. Delphi修改FMX Label字体颜色
  15. svn的安装出现报错问题解决办法
  16. 先定个小目标,免费360度评价(评估)反馈系统上线,开放部分源码
  17. 关于rem移动端 html字体大小自适应设置的问题
  18. 再谈6大国产CPU处理器
  19. 我国工业自动化市场现状分析报告
  20. 会声会影2022试用版 智能、快速、简单的视频剪辑软件

热门文章

  1. 人人商城互动直播配置(公众号)
  2. 逼狼去吃草,太经典了!(我看了10遍)
  3. 一篇精彩的创业励志演讲稿
  4. 微信小程序(十一)实战——时间的获取,比较,判断(微信小程序 如何获取时间)
  5. 安卓关于不同屏幕大小的解决方案-支持多屏
  6. i5 1035g7和r5 3550h 哪个好
  7. JPA 多表分页查询
  8. 计算机学院迎接新生标语,迎接新生的横幅标语
  9. 口子窖Q3营收净利双增背后:高档酒占比下降拖累毛利率下滑
  10. html2canvas ios出问题,html2canvas 在 IOS 微信中绘图白屏黑屏问题