• 1. Android的事件处理机制主讲:王亭
  • 2. Android的事件处理与界面编程最紧密的知识就是事件处理。当用户在界面上执行各种操作,应用程序必须为用户提供响应动作,这种响应动作就需要通过事件处理来完成。
  • 3. Android的事件处理Android提供了两套强大的事件处理机制: 基于监听的事件处理。 基于回调的事件处理。
  • 4. 基于监听的事件处理在事件监听处理模型中,主要涉及以下三类对象: 事件源(Event Source):事件发生的场所,通常是各个组件,如按钮,菜单 事件(Event):用户进行的操作,如单击、触摸等。 事件监听器(Event Listener):负责监听事件源所发生的事件,并对各种事件做出相应的响应。
  • 5. 基于监听的事件处理事件处理流程示意图:事件源事件监听器事件处理事件处理事件处理事件外部动作将监听器注册到事件源触发事件源上的事件生成事件对象触发事件监听器做出响应
  • 6. 基于监听的事件处理基于监听的事件处理模型编程步骤如下: 获取普通界面组件(事件源),也就是被监听的对象。 实现事件监听器类,该监听器类需要实现一个XxxListener接口。 调用事件源的setXxxListener方法将监听器注册给普通组件(事件源)。
  • 7. 基于监听的事件处理基于监听的事件处理中,编程的关键是实现事件监听器类。 在程序中实现事件监听器,通常有如下几种形式: 内部类形式:将事件监听器类定义成当前类的内部类。 外部类形式:将事件监听器类定义成一个外部类。
  • 8. 基于监听的事件处理Activity本身作为事件监听器类:让Activity本身实现监听器接口,并实现事件处理方法。 匿名内部类形式:使用匿名内部类创建事件监听器对象。 直接绑定到标签:将onClick、onLongClick等属性绑定到特定的方法。android:onClick=“btn_click"
  • 9. 基于回调的事件处理Android平台中,每个View都有自己的处理事件的回调方法,开发人员可以通过重写View中的这些回调方法来实现需要的响应事件。
  • 10. 基于回调的事件处理通过为View提供事件处理的回调方法,可以很好的把事件处理封装在View内部,从而提高程序的内聚性。 基于回调的事件处理适合用于处理逻辑比较固定的View。
  • 11. 基于回调的事件处理在View中的回调方法如下: boolean onKeyDown (int keyCode, KeyEvent event):当用户在该组件上按下某个按键时触发该方法。 boolean onKeyUp (int keyCode, KeyEvent event):当用户在该组件上松开某个按键时触发该方法。 boolean onTouchEvent (MotionEvent event):当用户在该组件上触摸屏幕时触发该方法。
  • 12. 基于回调的事件处理boolean onTrackballEvent (MotionEvent event):当用户在该组件上触发轨迹球事件时触发该方法。 boolean onKeyLongPress(int KeyCode, KeyEvent event):当用户在该组件上长按某个键时触发该方法。 boolean onKeyShortcut(int KeyCode, KeyEvent event):当一个快捷键事件发生时触发该方法。
  • 13. 基于回调的事件传播几乎所有的基于回调的事件处理方法都有一个boolean类型的返回值,该返回值用于判断处理方法能否完全处理该事件: 如果处理事件的回调方法返回true,表示该处理方法已经完全处理该事件,该事件不会传播出去。 如果处理事件的回调方法返回false,表示该处理方法并未完全处理该事件,该事件会传播出去。
  • 14. 响应系统设置事件Configuration类专门用于描述手机设备上的配置信息。 Configuration类提供了如下属性来获取系统配置信息: public float fontScale:返回当前用户设置的字体缩放因子。 public int keyboard:获取当前设备所关联的键盘类型。
  • 15. 响应系统设置事件public boolean keyboardHidden:标识当前键盘是否可用。 public Locale locale:获取用户当前的位置。 public int mmc:获取移动信号的国家码。 public int mnc:获取移动信号的网络码。 public int navigation:判断系统上方向导航设备的类型。 public int orientation:获取系统屏幕方向。
  • 16. 响应系统设置事件如果需要监听系统设置的更改,可以重新Activity的onConfigurationChanged(Configuration newConfig)方法,该方法是一个基于回调的方法,当系统设置发生改变时,该方法会被自动触发。
  • 17. Handler消息传递机制Android中不允许Activity新启动的线程访问该Activity里的界面组件,这就导致新启动的线程无法动态改变界面组件的属性值。 如果需要新启动的线程周期性的改变界面组件的属性值,需要借助Handler的消息传递机制来实现。
  • 18. Handler消息传递机制Handler类的主要作用有两个: 在新启动的线程中发送消息。 在主线程中获取、处理消息。
  • 19. Handler消息传递机制Handler类中包含处理消息的方法,当新启动的线程发送消息时,Handler类中处理消息的方法会被自动回调: void handleMessage(Message msg):处理消息的方法。 final boolean hasMessages(int what):检查消息队列中是否包含what属性为指定值的消息。 sendEmptyMessage(int what):发送空消息。
  • 20. Handler消息传递机制final boolean sendEmptyMessageDelayed(int what, long delayMillis):指定多少毫秒之后发送空消息。 final boolean sendMessage(Message msg):立即发送消息。 final boolean sendMessageDelayed(Message msg, long delayMillis):指定多少毫秒之后发送消息。
  • 21. 谢谢大家!