第三章,事件处理

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

3.1Android的事件处理
 Android提供了强大的事件处理机制,包括两套事件处理机制:
  1.基于监听的事件处理
  2.基于回调的事件处理


3.2基于监听的事件处理
 3.2.1事件监听的处理模式
  在事件监听的处理模型中,主要涉及如下三类对象
  Event Source(事件源),
  Event(事件)
  EventListener(事件监听器)

 基于监听的事件处理模型的变成步骤:
 1.获得普通界面组件(事件源),也就是被监听的对象。
 2.实现事件监听器类,该监听器类是一个特殊的java类,必须实现一个 XxxListener接口。
 3.调用事件源的setXxxListener方法将事件监听器对象注册给普通组件。

 
 View内部接口:
  View.OnClickListener:单击事件的事件监听器必须实现的接口。
  View.OnCreateContextMenuListener:创建上下文菜单事件的事件监听器必须实现的接口。
  View.onFocusChangeListener:焦点改变时间的事件监听器必须实现的接口。
  View.OnKeyListener:按键事件的事件监听器必须实现的接口
  
  View.OnLongClickListener:长单击事件的时间监听器必须实现的接口。
  View.OnTouchListener:触摸屏事件的事件监听器必须实现的接口。


 当事件源组件上发生事件时,系统将会执行该事件源组件上的监听器的对应处理方法。与普通java方法调用不同的是:普通java程序的方法由程序主动调用,事件处理中事件处理器方法是由系统负责调用。


 在程序中实现监听器,通常有如下几种形式:
 内部类形式:当事件监听器类定义成当前类的内部类
 外部类的形式:将事件监听器类定义成一个外部类
 Activity本身作为事件监听器类,让Activity本身实现监听器接口,并实现事件处理方法。
 匿名内部类形式:使用匿名内部类创建事件监听器对象。

3.2.4外部类作为事件监听器类
 使用顶级类定义事件监听器的形式比较少见,主要因为两个原因:
  1.事件监听器通常属于特定的GUI界面,定义成外部类不利于提高程序的内聚性。
  2.外部类的事件监听器不能自由访问创建GUI组件类中的组件,编程不够整洁

  
 3.2.7直接绑定到标签
  andorid还有更简单的绑定事件监听器的方式,直接在界面布局文件中为指定标签绑定事件处理方法。

 <Button
  android:onClick="clickHandler"
 />
 
 public void clickHandler(View source){
  EditText show = (EditText)findViewById(R.id.show);  
  show.setText("bn按钮被单击了");
 }
 
 程序中定义一个clickHandler(View source)方法,当程序中的bn按钮被单击时,该方法将会被激发并处理bn按钮上的单击事件。

 

 3.3基于回调的事件处理

 为了实现回调机制的事件处理,Android为所有的GUI组件都提供了一些事件处理方法。
 View下的方法
 boolean onKeyDown(int keyCode,KeyEvent event):当前用户在该组件上按下某个按键时触发。
 。。。。。
 。。。。。

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

对于基于回调的传播而言,某组件上所发生的事情不仅激发该组件上的回调方法,也会触发该组件所在Activity的回调函数用法--只要事件能传播到该Activity。


 当组件上发生某个按键被按下的事件时,Android系统最先触发的应该是该按键上 绑定的事件监听器,接着才能触发该组件提供的事件回调方法,然后还会传播给该组件的Activity.但是如果返回true,那么该事件将不会继续向外传播。

 
 3.3.3重写onTouchEvent方法响应触摸屏事件

 基于监听的事件处理模式具有更大的优势
  基于监听的事件模式分工更明确,事件源,事件监听由两个类分开实现,因此具有更好的可维护性。

 Android的事件处理机制保证基于监听的事件监听器会被优先触发。

3.4响应系统设置的事件
 3.4.1Configuration类简介
  Configuration类专门用于描述手机设备上的配置信息,这些配置信息既包括用户特定的配置项,也包括系统的动态设备配置。
 Configuration cfg = getResources().getConfiguration();

 3.4.2重写onConfigurationChanged响应系统设置的更改。

 动态更改系统设置,因此需要在Androidmanfest.xml文件中授予应用程序更改系统设置的权限,并设置Activity运行动态修改的系统设置是屏幕方向(orientation)。
  android:configChanges = “orientation”
 <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"  />


3.5 Handler消息传递机制
 3.5.1Handler类简介
 Handler类的主要作用有两个:
 -- 在新启动的线程中发送消息。
 -- 在主线程中获取,处理消息。

 Handler类包含如下方法用于发送,处理消息。 
 
 void handleMessage(Message msg)处理消息的方法,该方法通常用于重写。

 sendEmptyMessage(int what):发送空消息

 final boolean sendMessage(Message msg)立即发送消息

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值