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)立即发送消息