`
wo_deqing
  • 浏览: 64230 次
文章分类
社区版块
存档分类
最新评论

Android的事件处理模式

 
阅读更多
Android的事件处理模式有两种:
基于监听的事件处理模式 & 基于回调的事件处理模式

1.基于监听的事件处理模式,这个比较简单,实现方法是
应用,内部类/内部匿名类/外部类/Activity本身实现监听接口作为事件监听器类,
或者直接绑定到标签五种方式。前四个大同小异,现在简单说下最后一种

对应很对Android标签而言,它们都支持onClick、onLongClick等属性,这种属性
的属性值就是一个形如xxx(View source)的方法的方法名。
例如在xml文件中有如下标签:

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="click me"
android:onClick="clickHandler"/>
这就意味着需要在该界面布局对应的Activity中定义一个
void clickHandler(View source)方法,该方法将会负责处理该按钮上的单击事件。

2.基于回调的事件处理模式
回调模式在当用户在GUI组件上激发某个事件时,组件自己特定的方法将会负责处理该事件。
为了使用回调机制类处理GUI组件上所发生的事件,我们需要为该组件提供对应的事件处理
方法,而java又是一种静态语言,我们无法为某个对象动态地添加方法,因此只能继承GUI
组件类,并重写该类的事件处理方法来实现。例如:
自定义MyButton类继承Button。并重写onKeyDown方法

public boolean onKeyDown(int keyCode, KeyEvent envent){
suiper.onKeyDown(keyCode, envent);
Log.i(TAG, "do sth .......");
return true;//返回true,表明该事件不向外扩散
}

xml文件中的标签如下:
<com.packagename.MyButton
...
... />
点击这个按钮就会打印“do sth .......”信息,不许要绑定任何监听事件。因为该按钮自己重写
了onKeyDown方法,这意味着该按钮将会自己处理相应的事件。

3.两种处理模式的比较:
基于监听的事件模型分工更明确,事件源、事件监听由两个类分开实现,因此具有更好的可维护新
Android的事件处理机制保证基于监听的事件监听器会被优先触发。
但是在某些特定的情况下,基于回调的事件处理机制会更好地提高程序的内聚性。比如在一个工程里的
所有Button在被按下的时候背景为图片a,在抬起时候背景图片为图片b。如此功能就应该用回调机制
实现。

4.基于回调的事件传播
几乎所有基于回调的事件处理方法都有一个boolean类型的返回值,该返回值用于标识该该处理方法
是否能完全处理该事件:
如果处理事件的回调方法返回true,表明该处理方法已完全处理该事件,该事件不会传播出去。
返回false则反之。

如果我们把MyButton对象绑定onKeyListener()监听器,并在监听事件里打印“listener”.
并设定监听器中的onKey方法也返回false.表示都没有完全处理该事件。
把回调模式里的onKeyDown方法返回值设定为false。
当两个模式都不能完全处理该事件,该事件就会传播给该View坐在的Activity.
重写Activity的onKeyDown方法,并打印“activity”信息。

点击MyButton,查看log如下:
listener
do sth .......
activity
可知道,Android系统最先触发的是该按键上绑定的事件监听器,接着触发事件的回调方法,然后
还会传播到该组件所在的Activity.

但是如果我们让任何一个事件处理方法返回true,那么该事件就不会继续向外传播。


分享到:
评论

相关推荐

    Android、教程<经典> 6 Android事件处理

    在Android开发中,事件处理是应用交互的核心部分,它使得用户与界面元素进行互动成为可能。本教程将深入探讨Android事件处理机制,包括点击事件、触摸事件以及各种监听器的使用。以下是关于这个主题的详细内容: 1....

    Android-Android日夜间模式切换

    在Android应用开发中,日夜间模式切换是一项重要的用户体验优化功能,它允许用户根据环境光线条件或个人偏好在明亮(日间)和暗淡(夜间)的主题之间自由切换。这一功能通常通过更改应用的颜色方案、字体颜色和背景...

    Android白天夜晚模式切换实现

    然后在对应的SettingsFragment中处理开关的点击事件,调用AppCompatDelegate的相应方法: ```java switchPref.setOnCheckedChangeListener((preference, isChecked) -&gt; { if (isChecked) { AppCompatDelegate....

    《Android源码设计模式解析与实战》PDF版本下载.txt

    观察者模式是Android中事件处理机制的基础,例如BroadcastReceiver、LiveData等。 ### 实战应用案例 - **单例模式**:在Android项目中,可以利用单例模式来管理全局的网络请求、数据库操作等。 - **适配器模式**:...

    Android设计模式之代理模式(Proxy Pattern)

    在Android开发中,代理模式的应用尤为常见,尤其在处理复杂的业务逻辑、网络请求、界面交互等方面。 **代理模式的基本概念** 代理模式的核心思想是创建一个代理类,该类作为原对象的代理,它拥有与原对象相同的...

    Android源码设计模式解析与实战.PDF(完整版)

    根据提供的文件信息“Android源码设计模式解析与实战.PDF(完整版)”,本文将深入探讨其中的关键知识点,包括但不限于Android开发中常见的设计模式及其在实际项目中的应用案例。 ### Android设计模式概述 #### 设计...

    应用展示了创建Kiosk(桌面锁定)应用时Android锁屏任务模式的基本使用

    在Android系统中,Kiosk模式,也称为自助服务模式或专有模式,是一种特殊的应用程序部署方式,主要用于商业、教育和公共场所,使设备只能运行特定的应用程序,限制用户对系统的其他部分进行访问。这种模式有助于确保...

    Android源码设计模式

    3. **观察者模式** (Observer): `BroadcastReceiver`是Android中的典型观察者模式,它监听特定的广播事件并做出响应。当某个事件发生时,注册的接收器会接收到通知。 4. **适配器模式** (Adapter): `BaseAdapter`在...

    android 日夜模式切换

    在Android应用开发中,日间模式与夜间模式的切换是一个重要的功能,特别是在追求用户体验和个性化设计的当下。本文将深入探讨如何使用Android Studio (AS) 实现这一功能,并结合一个名为"DayNightSample"的示例项目...

    android设计模式之代理模式

    在Android上下文中,代理模式常常用于数据加载、权限控制、事件处理等方面。下面我们将深入探讨代理模式的概念、工作原理以及如何在Android应用中应用。 代理模式的核心思想是在原始对象(被代理对象)与客户端之间...

    android事件分析

    Android事件监听器有两种模式:一是实现特定的接口,如View.OnClickListener,另一种是使用匿名内部类或 lambda 表达式。例如,设置按钮点击事件可以这样写: ```java button.setOnClickListener(new View....

    android常用设计模式

    Android 设计模式系列还包括工厂方法模式、抽象工厂模式、创建者模式、原型模式、单例模式、适配器模式、桥模式、组合模式、装饰模式、外观模式、享元模式、代理模式、解释器模式、模板方法模式、职责链模式、命令...

    Android源码设计模式解析与实战 pdf 完整版

    在Android框架中,代理模式常用于实现事件处理,比如Activity和View之间的交互。观察者模式用于实现对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。策略模式允许...

    Android源码设计模式解析与实战.pdf

    观察者模式非常适合处理异步事件的通知机制。例如,在一个音乐播放器应用中,可以使用观察者模式来监听音乐播放状态的变化,一旦状态发生变化(如播放、暂停、停止),就可以立即通知UI界面进行更新,提高用户体验。...

    android中的事件处理

    Android事件处理机制主要包括两种方式:监听器(Listener)模式和消息队列(Message Queue)。本篇文章将深入探讨Android事件处理的核心概念、工作原理以及如何在实践中应用。 一、事件处理基础 1. 触摸事件:...

    Android源码设计模式解析与实战

    3. **观察者模式**:Android的BroadcastReceiver就是一种观察者模式的应用,它允许组件订阅感兴趣的广播事件,当事件发生时,被观察者(BroadcastDispatcher)会通知所有观察者(Receiver)。此外,ContentObserver...

    android 源码设计模式

    10. **职责链模式(Chain of Responsibility)**:例如,Android的触摸事件分发机制,`ViewGroup`的`onInterceptTouchEvent()`和`dispatchTouchEvent()`形成了一个处理链,每个节点都有机会处理事件。 深入研究这些...

    Android-23种设计模式

    Android的`MenuItem`和`OptionsItemSelected`事件处理就是命令模式的应用。 12. **责任链模式(Chain of Responsibility)**:避免将请求的发送者和接收者耦合在一起,多个对象形成一个处理链,沿着链传递请求,直到...

    Android源码设计模式解析与实战.rar

    8. **责任链模式**:在处理触摸事件时,Android组件会按照一定的顺序传递事件,每个组件都有机会处理或传递事件,形成一条责任链。 9. **策略模式**:例如,Android的动画系统允许开发者选择不同的动画策略,如...

    Android智能情景模式

    在使用Android智能情景模式时,用户应熟悉如何创建和编辑情景,设置触发条件(如时间、地点或事件),以及调整各个模式下的系统设置,如音量、屏幕亮度、网络连接等。定期检查并更新应用程序,以获取最新的改进和...

Global site tag (gtag.js) - Google Analytics