基于回调的事件模型:事件源与事件监听是统一的,事件由事件源本身处理。

基于回调的事件处理适合于应付那种事件处理逻辑比较固定的VIew。

Android最先触发控件上绑定的事件监听器。


使用回调机制处理GUI组件上所发生的事件,需要自定义组件类继承GUI组件类,并重写该类的事件处理方法来实现。并且在XML文件中使用自定义组件类。


Android为所有GUI组件都提供了一些事件处理的回调方法,如View类:

1.boolean onKeyDown(int keyCode,keyEvent event):当用户在该组件上按下某个按键时触发该方法。//键码、事件 对于有键盘的适用

2.boolean onKeyLongPress(int keyCode,keyEvent event):当用户在该组件上长按某个按键时触发该方法。

3.boolean onKeyShortcut(int keyCode,KeyEvent event):当一个键盘快捷键事件发生时触发该方法。

4.boolean onKeyUp(int keyCode,KeyEvent event):当用户在该组件上松开某个按键时触发该方法。

5.boolean onTouchEvent(MotionEvent event):当用户在该组件上触发触摸屏事件时触发该方法。 //对于触屏的适用

6.boolean onTrackballEvent(MotionEvent event):当用户在该组件上触发轨迹球屏事件时触发该方法。


当回调方法返回true时,表明该处理方法已经完全处理该事件,该事件不会传播出去。

当回调方法返回false时,表明该处理方法并未完全处理该事件,该事件会传播出去。

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


示例:

activity_main

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><com.example.huidiao.MyButtonandroid:id="@+id/bn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按钮上的触屏"/></LinearLayout>


MyButton.java

packagecom.example.huidiao;publicclassMyButtonextendsButton{//AttributeSet是接收xml中定义的属性信息,这不一定是自定义布局,不是自定义布局也有该属性,要不xml中定义的属性信息就无法接收了。publicMyButton(Contextcontext,AttributeSetset){super(context,set);}//重写触屏事件的回调方法publicbooleanonTouchEvent(MotionEventevent){//事件super.onTouchEvent(event);Log.v("按钮上触屏事件","在按钮上的触屏,事件源自己处理");returnfalse;//②}}



MainActivity.java

packagecom.example.huidiao;publicclassMainActivityextendsActivity{protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}//重写onTouchEvent方法,该方法可监听它所包含的所有控件被触屏事件publicbooleanonTouchEvent(MotionEventevent){//事件super.onTouchEvent(event);Log.v("触屏事件传递到Activity","在自定义按钮上触屏,事件在按钮所在Activity处理");returntrue;//③}}





更多相关文章

  1. Eclipse开发Android常用快捷键
  2. Android实现底部弹出列表选择器
  3. Android(安卓)TextView使用HTML处理字体样式、显示图片等
  4. android中轮播图的实现
  5. Android应用AsyncTask处理机制详解及源码分析
  6. 程序的组件模式
  7. Android(安卓)Service 浅析(生命周期,启动方式,前台Service)
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. Android移动开发-添加手势以及识别用户手
  2. Android(安卓)物联网socket通信采坑
  3. android 系统核心机制binder(02)binder驱动
  4. Android(安卓)报错 - 无法解析类型 java.
  5. Android(安卓)4 通过 USB 连接扫描枪 获
  6. 对学Android的几点建议(磨砺营马剑威Andro
  7. Android常用名令集锦(图文并茂)(转:来自网
  8. 深入Android(安卓)【五】 ―― 任务和进
  9. Android(安卓)系统的裁剪
  10. Android文件命名规范初版