原文: [置顶] Android菜鸟的成长笔记(11)——Android中的事件处理

Android提供了两种方式来处理事件,一个是基于回调的事件处理,另一个是基于监听的事件处理,举个例子:

基于回调的事件处理

  @Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubreturn super.onTouchEvent(event);}

基于监听的事件处理

    button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub}});

一般来说,基于回调的事件处理可用于处理一些通用性的行为,而对于某些行为只能通过监听事件处理。

一、监听事件

监听事件中,主要涉及三类对象:

EventSource(事件源):事件发生的场所,例如按钮对象。

Event(事件):事件的相关信息的封装类

EventListener(事件监听器):负责监听事件源,并对事件做出响应。

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

例如:

package com.example.testlistener;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.EditText;public class MainActivity extends Activity {EditText txt;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button bn = (Button)findViewById(R.id.bn);txt = (EditText) findViewById(R.id.txt);bn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {txt.setText("我单击了Button");}});bn.setOnLongClickListener(new OnLongClickListener() {@Overridepublic boolean onLongClick(View arg0) {txt.setText("我长按了Button");return true;}});}
}

二、回调事件

如果监听机制是一种委托式的事件处理,那么回调机制则恰好相反,对于基于回调的事件处理模型来说,事件源与事件监听器是同一个对象,当用户在某个组件上激发事件时,组件自己特定的方法会处理该事件。
例如:
新建一个MyButton类继承自Button
package com.example.testlistener;import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Button;public class MyButton extends Button{public MyButton(Context context){super(context);}public MyButton(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public MyButton(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_UP:this.setText("点击了我");break;default:break;}return super.onTouchEvent(event);}
}

在MyButton中重写了onTouchEvent方法,这就是回调监听函数。

activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><EditText android:id="@+id/txt"android:layout_width="match_parent"android:layout_height="wrap_content"android:editable="false"android:cursorVisible="false"android:textSize="12pt"/><com.example.testlistener.MyButton android:id="@+id/bn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="点我啊"/>
</LinearLayout>

运行结果:

三、系统设置事件

Configuration类专门用于描述手机设备上的配置信息,这些配置信息即包括用户的特定配置也包括系统的动态设备配置。
例如:
     bn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {txt.setText("我单击了Button");Configuration cfg = getResources().getConfiguration();//判断屏幕方向String screen = cfg.orientation == Configuration.ORIENTATION_LANDSCAPE ? "横向屏幕":"竖向屏幕";//手机的MNC码String mncCode = cfg.mnc + "";String naviName = cfg.orientation == Configuration.NAVIGATION_NONAV ? "没有方向控制":cfg.orientation == Configuration.NAVIGATION_WHEEL ? "滚轮控制方向":cfg.orientation == Configuration.NAVIGATION_DPAD? "方向键控制方向":"轨迹球控制方向";String touchName = cfg.touchscreen == Configuration.TOUCHSCREEN_NOTOUCH ? "无触摸屏":"支持触摸屏";System.out.println("screen = " + screen);System.out.println("mncCode = " + mncCode);System.out.println("naviName = " + naviName);System.out.println("touchName = " + touchName);}});

运行结果:

Android菜鸟的成长笔记(11)——Android中的事件处理相关推荐

  1. Android菜鸟的成长笔记(13)——异步任务(Async Task)

    Android菜鸟的成长笔记(13)--异步任务(Async Task) 原文: [置顶] Android菜鸟的成长笔记(13)--异步任务(Async Task) Android的UI线程主要负责处 ...

  2. Android菜鸟的成长笔记(3)——给QQ登录界面说So Easy

    上一篇:Android菜鸟的成长笔记(2)--第一个Android应用 我们前面已经做了第一个Android应用程序,虽然有点像QQ的登录界面,但是很多地方还是很难看,这一篇咱们来将这个界面做成一个标 ...

  3. Android菜鸟的成长笔记(25)——可爱的小闹钟

    摘要: 这一篇主要使用系统为我们提供的一个服务AlarmManager来制作一个Android小闹钟,同时还涉及到了自定义主题.判断第一次启动应用.自定义动画.对话框.制作指导滑动页面等方面.最后形成 ...

  4. Android菜鸟的成长笔记(5)——Android系统源代码你下载了吗?

    在上一篇中我们用Android系统源代码分析了我们前面写的代码,有的朋友可能就会问怎么才能下载到Google官方的源代码呢?下面我们通过Git管理工具来对Android系统源代码进行下载.另外为了方便 ...

  5. Android菜鸟的成长笔记(28)——Google官方对Andoird 2.x提供的ActionBar支持

    在Google官方Android设计指南中(链接:http://www.apkbus.com/design/get-started/ui-overview.html)有一个新特性就是自我标识,也就是宣 ...

  6. Android菜鸟的成长笔记(16)——Service简介

    Service是Android四大组件之一 1.Service与Activity的区别在:Service一直在后台运行,没有用户界面. 2.选择Activity与Service的标准:如果某个程序组件 ...

  7. Hadoop学习笔记—11.MapReduce中的排序和分组

    Hadoop学习笔记-11.MapReduce中的排序和分组 一.写在之前的 1.1 回顾Map阶段四大步骤 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行: 从上图中可以清楚地看出 ...

  8. 一个Android菜鸟入门Flutter 笔记(一)

    1. Dart 基础语法 1.1 hello world 先来看个hello world,入口依然是main方法. printInteger(int a) {print('Hello world, t ...

  9. Android编程权威指南笔记3:Android Fragment讲解与Android Studio中的依赖关系,如何添加依赖关系

    Android Fragment 当我在学习时,了解了Fragment词汇 Fragment是一种控制器对象,我就把所了解的简单说一下.activity可以派fragment完成一些任务,就是管理用户 ...

最新文章

  1. FastReport 导出pdf时中文乱码的解决办法
  2. linux 生成字母序列,讲解在Linux平台中的Bash序列表达式(Sequence Expression)
  3. Error: could not open `C:\Java\jre7\lib\i386\jvm.cfg
  4. Linux进程间通信(四) - 共享内存
  5. Consider defining a bean named 'entityManagerFactory' in your configuration解决办法
  6. javaHTTP通信---get方式
  7. 透露一个未来3到5年的巨大商机
  8. 网络安全之***手法计中计
  9. 用python完成图形输出设备_用 Python 在多个输出设备上播放多个声音文件
  10. 解决Could not find artifact com.oracle:ojdbc7:pom:12.1.0.2 的方案
  11. 【编译打包】btsync-1.2.82-beta.el6.src.rpm
  12. 梯度、散度、旋度、拉普拉斯算子
  13. 如何全备份android固件,如何一键备份安卓手机操作系统
  14. 多机型手机外观清洁与检测设备设计
  15. 数字图像处理学习笔记(三)——空间分辨率和灰度分辨率、等偏爱曲线
  16. 从user 登陆开始
  17. ati hd 6470m驱动
  18. php 报警声,php 报警 [NOTICE] fpm_children_bury()
  19. win10系统可禁用的服务器,window10哪些服务可以禁止
  20. 微信昵称加「福」字,最新官方攻略来了!

热门文章

  1. C# 工厂模式 简单入门
  2. Win64 驱动内核编程-11.回调监控进线程句柄操作
  3. TLS实现代码段加密
  4. 【Flutter】Icons 组件 ( 加载 Flutter 内置的图标 | 材料设计图标完整展示 )
  5. 【计算机网络】网络安全 : 防火墙 ( 简介 | 防火墙功能 | 防火墙分类 | 分组过滤路由器 | 应用网关 )
  6. 【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )
  7. 【Netty】反应器 Reactor 模式 ( 单反应器 Reactor 单线程 | 单反应器 Reactor 多线程 )
  8. 【Netty】NIO 通道 ( Channel ) 组件
  9. 【Android应用开发】EasyDialog 源码解析
  10. MySQL 快速入门教程