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

基于回调的事件处理适合于应付那种事件处理逻辑比较固定的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. Android app widget 支持的Layout和widget组件
  2. android 开发使用 kotlin 进行点击事件监听和界面跳转,直接传也方
  3. Unable to start activity ComponentInfo 解决方法
  4. Android Jetpack组件学习 Room
  5. Android 安装apk的方法
  6. Android SQLite数据库解析并使用两种方法实现增删改查
  7. Android 读取XML的两种方法。
  8. Android使用EventBus传递事件

随机推荐

  1. TextView 实现 滚动条
  2. Android开发问题记录-ARouter init logis
  3. 2013.09.05——— android 蓝牙聊天室之
  4. 相对布局中的一些常用属性
  5. 2013.09.05——— android 蓝牙聊天室之
  6. android 收到SMS操作总结
  7. Android(安卓)布局----让一个控件居底部
  8. Android检测SD卡是否可用,Android获取磁盘
  9. android textview 跑马灯 滚动效果
  10. 自定义android RadioPreference组件