【Android应用开发技术:应用组件】Android事件处理机制

作者:郭孝星

微博:郭孝星的新浪微博

邮箱:[email protected]

博客:http://blog.csdn.net/allenwells

Github:https://github.com/AllenWells

事件处理:不管是桌面应用还是手机应用都需要去响应用户的动作,这种为用户动作提供响应的机制就是事件处理。

Android提供了两套事件处理机制,如下所示:

  • 基于监听的事件处理
  • 基于回调的事件处理

一般来说,基于回调的事件处理可用于处理一些通用性的事件,但对于某些特定的事件只能使用基于监听的事件处理。而且基于监听的事件处理会被优先触发。

下面我们来详细介绍一些这两种事件处理方式。

一 基于监听的事件处理

基于监听的事件处理是一种委派式的事件处理机制,普通组件(事件源)将整个事件处理委托给特定的对象(事件监听器),当该事件源发生指定的事件时,就通知所委托的事件监听器,由事件监听器来处理这个事件。

1.1 基于监听的事件处理模型

在基于监听的事件处理模型包含以下3类对象:

  • 事件源:即Event Source,事件发生的场所,通常就是各组件。
  • 事件:即Event,事件封装了界面组件发生的特定事情,通常是一次用户的相关操作,如果程序需要获得界面组件上所放生事件的相关信息,一般是通过Event对象来取得。
  • 事件监听器:即Event Listener,负责监听事件源所发生的事件,并对各种事件作出响应。

基于监听的事件处理模型如下图所示:

基于监听的事件处理模型Visio源文件下载

1.2 事件源监听器

基于监听的事件处理编程步骤如下所示:

  1. 获取普通界面组件(事件源),即被监听的对象。
  2. 实现事件监听器类,该类实现一个XxxListener的接口。
  3. 调用事件源的setXxxListener方法将事件监听器对象注册给普通组件。

举例

定义一个Button作为事件源

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_horizontal"
    >
<EditText
    android:id="@+id/show"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:editable="false"
    />
<Button
    android:id="@+id/bn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="单击我"
    />
</LinearLayout>

实现监听器监听事件源。

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

// 实现事件监听器接口
public class ActivityListener extends Activity
    implements OnClickListener
{
    EditText show;
    Button bn;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        show = (EditText) findViewById(R.id.show);
        bn = (Button) findViewById(R.id.bn);
        // 直接使用Activity作为事件监听器
        bn.setOnClickListener(this);
    }

    // 实现事件处理方法
    @Override
    public void onClick(View v)
    {
        show.setText("bn按钮被单击了!");
    }
}

在在基于监听的事件处理模型包含以下3类对象中,事件源随处可见,事件由Android系统产生,所以我们需要关注的主要还是实现事件监听器,常见的事件监听器有4种,如下所示:

  • 内部类形式:将事件监听器定义成当前类的内部类。
  • 外部类形式:将事件监听器定义成一个外部类。
  • Activity本身作为事件监听器:让Activity本身实现监听器接口,并实现事件处理方法。
  • 匿名内部类形式:使用匿名内部类创建事件监听器对象。

二 基于回调的事件处理

基于回调的事件处理没有事件监听器,当用户在界面组件激发某个事件时,组件自己特定的方法将会负责处理该事件。

2.1 基于回调的事件传播

几乎所有基于回调的时间处理方法都有一个boolean类型的返回值,该返回值用于标识该处理方法是否能完全处理该事件。

  • 如果处理事件的回调方法返回true,表明该处理方法已能完全处理该事件,该事件不会传播出去。
  • 如果处理事件的回调方法返回false,表明该处理方法并未能完全处理该事件,该事件会传播出去。
  • -

版权声明:当我们认真的去做一件事的时候,就能发现其中的无穷乐趣,丰富多彩的技术宛如路上的风景,边走边欣赏。

时间: 2024-10-12 12:30:39

【Android应用开发技术:应用组件】Android事件处理机制的相关文章

【Android应用开发技术:图像处理】Bitmap显示性能优化分析

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells Github:https://github.com/AllenWells [Android应用开发技术:图像处理]章节列表 Bitmap经常会消耗大量内存而导致程序崩溃,常见的异常如下所示:java.lang.OutofMemoryError:bitmap size extends VM budget,因此为了保证程序的稳定性,我们应该小心处理程序

【Android应用开发技术:用户界面】布局管理器

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells Github:https://github.com/AllenWells [Android应用开发技术:用户界面]章节列表 布局管理继承于ViewGroup.它用来管理Android应用用户界面里各组件,它的使用使得Android应用的图形用户界面具有良好的平台无关性. 常见的布局方式例如以下所看到的: 线性布局 表格布局 帧布局 相对布局 网络布

本人讲课时录制的Android应用开发技术教学视频

网盘地址:http://yun.baidu.com/pcloud/album/info?query_uk=1963923831&album_id=3523786484935252365 本人讲课时录制的视频,采用webex录制,视频文件内容相对较小30-50兆左右,1个视频文件平均大概有1个小时左右的时间,每个例子基本上从建立项目开始边做边讲. 由于讲课范围是Android应用开发技术,视频没涉及搭建环境,基础控件的使用等基础内容. 主要内容包括: 后台服务. 服务的绑定.服务和线程.远程服务和

【Android应用开发技术:用户界面】章节列表

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells Github:https://github.com/AllenWells [Android应用开发技术:用户界面]章节列表 [Android应用开发技术:用户界面]用户界面基本原理 [Android应用开发技术:用户界面]设备适配 [Android应用开发技术:用户界面]用户界面布局技巧 [Android应用开发技术:用户界面]View基本原理 [

【Android应用开发技术:用户界面】界面设计中易混淆的概念汇总

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells Github:https://github.com/AllenWells [Android应用开发技术:用户界面]章节列表 一 px.dp.sp px:即像素,每个px对应屏幕上的一个点. dp:即设备独立像素,一种基于屏幕密度的抽象单位,在每英寸160点的显示器上:1 dp = 1 px. sp:即比例像素,主要用来处理字体大小,可以根据用户字体

【Android应用开发技术:用户界面】9Patch图片设计

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells Github:https://github.com/AllenWells [Android应用开发技术:用户界面]章节列表 9Patch图片是一种特殊的PNG图片,该图片以.9.png为后缀名,它在原始图片四周各添加一个宽度为1像素的线条,这4条线决定了该图片的缩放规则和内容显示格则. 一 9Patch图片的显示规则 9Patch图片left边和t

【Android应用开发技术:网络通信】网络服务可发现基本原理

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells Github:https://github.com/AllenWells [Android应用开发技术:网络通信]章节列表 网络服务发现(Network Service Discovery)是一种在局域网内可以辨识并使用其他设备上提供的服务的技术,这种技术在端对端应用(例如:文件共享.联机游戏)中提供很好的帮助. NSD是基于Apple的Bonjo

Android艺术开发探索——第二章:IPC机制(下)

Android艺术开发探索--第二章:IPC机制(下) 我们继续来讲IPC机制,在本篇中你将会学习到 ContentProvider Socket Binder连接池 一.使用ContentProvider ContentProvider是Android中提供的专门用来不同应用之间数据共享的方式,从这一点来看,他天生就是适合进程间通信,和Messenger一样,ContentProvider的底层实现同样也是Binder,由此可见,Binder在Android系统中是何等的重要,虽然Conten

Android UI开发神兵利器之Android Action Bar Style Generator

ActionBar是3.0后的UI设计规范,同时也是Google极力推荐使用的设计风格,如何快速设计一个入眼的ActionBar呢,更进一步,给我们搭好一个入眼的ActionBar的模板吧,于是Android Action Bar Style Generator就出来了:http://jgilfelt.github.io/android-actionbarstylegenerator/ 国际惯例,上图 一目了然,小清新加大方便:大家应该都知道怎么用了吧,so easy! Android UI开发