Android学习笔记(36):Android的两种事件处理方式

Android提供了两种事件处理的方式:基于回调的事件处理 和 基于监听的事件处理。

 

我们来说的容易理解一点:

(1)基于回调的事件处理就是继承GUI组件,并重写该组件的事件处理方法。除了一些特定的情况,大部分情况使用基于回调的事件处理方式并不是最好的选择。

(2)基于监听的事件处理就是在监听器中定义事件的处理方式,再为组件绑定监听器。这种方式无疑是更能够体现面向对象思想的。

 

基于回调的事件处理:

 

View类包含如下的方法可以用于重写:

boolean onKeyDown(int keyCode,KeyEvent event):按下某个按键时触发

boolean onKeyUp(int keyCode,KeyEvent event):松开某个按键时触发

boolean onKeyLongPress(int keyCode,KeyEvent event):长按某个按键时触发

boolean onKeyShortcut(int keyCode,KeyEvent event):按下某个快捷键时触发

boolean onTouchEvent(MotionEvent event):触摸屏幕时触发

 

我们注意到返回值都是一个boolean值,这用于标识该方法能否完全处理该事件。返回true表示能完全处理,事件不会传播出去,返回false表示不能完全处理,事件会传播出去。交给下面的事件处理方法处理。

 

基于监听的事件处理:

 

这是一种委派式的事件处理方式:普通组件(事件源)将事件处理委托给(绑定)事件监听器,事件源发生指定的事件时,通知事件监听器来处理该事件。

 

下图展示的是基于监听的事件处理流程图:

了解下下面这几种概念:

事件源:就是各种GUI组件。

事件监听器:各种XxxListener类,需要实现事件处理方法的接口。

注册监听器:调用事件源的setXxxListener(XxxListener)方法。

 

View包含如下几个内部接口:

View.OnClickListener:处理单击事件

View.OnCreateContextMenuListener:处理单击上下文菜单项的事件

View.onFocusChangeListener:处理焦点改变事件

View.OnKeyListener:处理按键事件

View.OnLongClickListener:处理长按事件

View.OnTouchListener:处理触摸事件

 

一个事件监听器可以被多个GUI组件所共用。

 

实现事件监听器可以有如下几种形式:

内部类、外部类、Activity本身实现,匿名内部类、直接绑定到标签(这是特殊但很方便的形式)。

 

这各种实现如果熟悉Java的话,实现都是不难的。

时间: 2024-10-31 02:32:18

Android学习笔记(36):Android的两种事件处理方式的相关文章

Android学习笔记(35):Android活动条

在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,用于取代3.0之前的标题栏,并提供更为丰富的导航效果. ActionBar可以显示应用图标和Activity标题,还有Action Item活动项. ActionBar的主要用途: 1.可以设置该Activity的图标和标题. 2.可以配合Fragment用标签或是下拉列表实现不同页面的导航. 3.可以添加Action View为用户提供快捷的访问.   启用Act

Android学习笔记(33):Android对话框

Android为我们提供了多种对话框,其中AlertDialog功能最强大,最常用.此外,还有ProgressDialog.DatePickerDialog和TimePickerDialog.   AlertDialog.Builder类可以帮助我们方便的创建对话框. 具体步骤如下: 1.创建一个AlertDialog.Builder对象. 2.调用setTitle().setCustomTitle().setIcon()等方法设置对话框标题.图标.内容等. 3.调用AlertDialog.Bu

Android学习笔记(3):Android项目结构分析

为了更好的了解Android的工程结构,我们在命令行窗口创建一个Android工程,在命令行窗口输入如下的命令: android create project -n HelloWorld -t android-19 -p E:\AndroidWS\HelloWorld -k pres.zxc.helloworld -a  MainActivity (-n指定创建的项目的名称,-t指定Android平台,-p指定工程的保存路径,-k指定项目的报名,-a指定Activity的名称) 然后来到我们的工

Android学习笔记(6):Android应用的基本组件

1. Activity组件:负责与用户交互的组件 2. Service组件:为其他组件提供后台服务或监控其他组件的运行状态 3. BroadcastReceiver组件:广播消息接收器,监听的事件源是其他组件 4. ContentProvider组件:跨应用的数据交换 5. Intent和IntentFilter:应用内不同组件的通信   Activity组件:负责与用户交互的组件 (1). setContentView(View):在Activity中,可以通过setContentView(V

Android学习笔记45之gson解析json_Android

JSON即JavaScript Object Natation, 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing

Android学习笔记45之gson解析json

JSON即JavaScript Object Natation, 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing

API Demos 2.3 学习笔记 (3)-- Android应用程序架构

更多精彩内容,请点击阅读:<API Demos 2.3 学习笔记> Android应用程序以可以分为下三种类型:1.前端Activity(Foreground Activities):通俗一点讲Activity可以理解为一个界面容器,里面装着各种各样的UI组件.例如,上面例子中"Hello World" 显示界面.2.后台服务(Background Services):系统服务(System Service).系统Broadcast(广播信息)与Receiver(广播信息)

深入Android中BroadcastReceiver的两种注册方式(静态和动态)详解_Android

今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来接收来自系统和应用中的广播.在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能:当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作:当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户

Android学习笔记之应用单元测试实例分析_Android

本文实例讲述了Android学习笔记之应用单元测试.分享给大家供大家参考,具体如下: 第一步:在AndroidManifest.xml中加入如下两段代码: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.pccw" android:versionCode="1" android:versionName="1.0&qu