你的位置:
首页
>
IT圈
>
浅谈Android事件原理
2024年8月7日发(作者:公冶清晖)
国微技术 李良成
浅谈android单击和键盘事件
一,
二,
三,
概念和种类 ........................................................................................................ 1
事件的用法。..................................................................................................... 1
事件的过程及原理.............................................................................................. 2
四, android事件的常用方法...................................................................................... 5
1) onClick:按钮单击事件。................................................................................... 5
2) onLongClick:长按事件。 .................................................................................. 5
3) onCreateContextMenu:上下文菜单事件。 .......................................................... 6
4) onFocusChange:焦点事件。 .............................................................................. 7
5) onTouchEvent:触屏事件。 ................................................................................ 7
6) onKeyUp、onKeyDown:键盘或遥控事件。 ....................................................... 8
7) onTrackballEvent:轨迹球事件。 ........................................................................ 8
一, 概念和种类
事件是用户与应用的UI交互的动作。在android中有许许多多的事件,即使是一个简
单的单击事件,也有按下、弹起、长按之分。它们以监听接口和基于回调方式进行划分
的。下面列出几种常用的事件:
1, onClick:按钮单击事件。
2, onLongClick:长按事件。
3, onCreateContextMenu:上下文菜单事件。
4, onFocusChange:焦点事件。
5, onTouchEvent:触屏事件。
6, onKeyUp、onKeyDown:键盘或遥控事件。
7, onTrackballEvent:轨迹球事件。
二, 事件的用法。
在android平台中,每个View都有自己处理事件的回调方法,开发人员只需要重写这
些回调方法,就可以实现需要的响应事件。
1/9
国微技术 李良成
上图是一个简单的应用实例。程序的主入口是MainActivity,与之对应的布局文件是
res/layout/ ,在布局文件中有一个id为button的按钮。
单击事件只需要注册相应的监听器(setOnClickListener)监听事件的来源,当事件发生
时作出相应的处理。
键盘或遥控事件只需重写父类Activity的(onKeyDown)方法(父类已经封装好了接口),
通过接收不同的键值作出相应的处理。
三, 事件的过程及原理
事件过程原理:
2/9
国微技术 李良成
1, 为事件源对象添加监听,这样当某个事件被触发时,系统才会知道通知谁来处
理该事件,如图(A)所示。
2, 当事件发生时,系统会将事件封装成相应类型的事件对象,并发送给注册到事
件源的事件监听器,如图(B)所示。
3, 当监听器对象接收到事件对象之后,系统会调用监听器中相应的事件处理方法
来处理事件并给出响应,如图(C)所示。
事件机制原理:
通过上面事件过程原理的描述,我们大概能明白处理事件的一般步骤。下面我们就
来分析系统是如何监听到一个输入设备事件的,又是利用何种方式将这种事件层层传递
给应用层并作出响应的。这是个看似简单的过程,实际浩大的工程,我们且称之为事件
系统或事件机制。
下图为android事件大体传递过程:
下图为android事件具体实现过程:
3/9
国微技术 李良成
如图示,自下而上层层剖析:
系统在启动过程中会加载驱动程序。
加载驱动程序时会进入到EventHub(文件位置:
/frameworks/base/libs/ui/),会执行openPlatformInput(void)这一函数(函数
位置:文件的第421~454行),该函数主要功能是扫描/dev/input目录,获取输入设备
(/dev/input下通常是关于Event类型的驱动设备)。通过不断循环读取目录文件,最后
通过open_device()打开设备。
EventHub实现了对驱动程序的控制,并从中获得信息KeyLayout(按键布局)和
KeyCharacterMap(按键字符映射)。定义按键布局和按键字符映射需要运行时配置文件
的支持,它们的后缀名分别为kl和kcm
4/9
国微技术 李良成
在framework层具有KeyInputDevice等类用于处理由EventHub传送上来的信息,
通常信息由数据结构RawInputEvent和KeyEvent来表示。通常情况下,对于按键事件,
则直接使用KeyEvent来传送给应用程序层,对于触摸屏和轨迹球等事件,则由
RawInputEvent经过转换后,形成MotionEvent传送给应用程序层。
在Android的应用程序层中,通过重新实现onTouchEvent和onTrackballEvent等函
数来接收运动事件(MotionEvent),通过重新实现onKeyDown和onKeyUp等函数来接
收按键事件(KeyEvent)。这些类包含在包中。
小常识:创建一个Activity时需继承一个父类Activity,而父类Activity中已经申
明了各个事件的接口和方法。子类继承父类后拥有父类非private得属性和功能;
四, android事件的常用方法
1) onClick:按钮单击事件。
(1) 通过组件ID获取组件实例。
(2) 为该组件注册OnClickListener监听。
(3) 实现onClick方法。
代码实例:
2) onLongClick:长按事件。
(1) 通过组件ID获取组件实例。
(2) 为该组件注册OnLongClickListener监听。
(3) 实现onClick方法。
代码实例:
5/9
国微技术 李良成
3) onCreateContextMenu:上下文菜单事件。Android的上下文菜单在概念上和PC软件
的右键菜单类似。当一个视图注册到一个上下文菜单时,执行一个在该对象上的“长
按”(按住不动差不多两秒钟)动作,将出现一个提供相关功能的浮动菜单。上下文
菜单可以被注册到任何视图对象中,不过,最常见的是用于列表视图ListView的
item,在按中列表项时,会转换其背景色而提示将呈现上下文菜单。 (电话联系人
列表提供了关于这个特性的一个很好的例子)。
(1) 通过组件ID获取组件实例。
(2) 为该组件注册onCreateContextMenuListener监听。
(3) 实现onCreateContextMenu方法。
代码示例:
上图中的事件的结果是:当你把焦点移动到该控件上时,长按会弹出对话框,对话框中
的Edit、Delete、Select组成列表。
当然,有列表操作,就该有相应的事件。很明显,在这里继续添加点击事件已经不现
实,会使代码臃肿,程序层次太深,容易引发ANR异常。还好,Android已经提供了解
决的办法。上图中的事件一般会与下图方法结合使用:
6/9
国微技术 李良成
注意:a,上下文菜单项不支持图标或快捷键。
b,第一幅图的事件函数是以内部类的形式实现的,而第二幅图的函数只是一
个重写了父类方法的普通函数。
4) onFocusChange:焦点事件。上面说到单击事件就是指单击某个组件时触发的事情,
而焦点事件则是只要该组件获得焦点,不用点击就会触发相应的事件。
(1) 通过组件ID获取组件实例。
(2) 为该组件注册onFocusChange Listener监听。
(3) 实现onFocusChange方法。
代码实例:
5) onTouchEvent:触屏事件。在View范围内触摸按下、抬起或滑动,都会触发该事件。
(1) 通过组件ID获取组件实例。
(2) 为该组件注册onTouchEvent Listener监听。
(3) 实现onTouchEvent方法。
代码实例
7/9
国微技术 李良成
6)onKeyUp、onKeyDown:键盘或遥控事件。onKeyUp指当按键弹起,onKeyDown表示
按键按下。
方法:直接在类中,重写父类的方法。
代码实例
7)onTrackballEvent:轨迹球事件。
下图是一款HTC G3的手机,图中所示的轨迹球接收轨迹球事件。(图中所述是一
个向鼠标滚轮的小球,通过滚动这个小球来控制方向。在HTC G7上则去除了滚轮
采用光电形式,不过接收的事件都是一样)
8/9
国微技术 李良成
实例代码
国微技术 李良成
2011-12-5
9/9
2024年8月7日发(作者:公冶清晖)
国微技术 李良成
浅谈android单击和键盘事件
一,
二,
三,
概念和种类 ........................................................................................................ 1
事件的用法。..................................................................................................... 1
事件的过程及原理.............................................................................................. 2
四, android事件的常用方法...................................................................................... 5
1) onClick:按钮单击事件。................................................................................... 5
2) onLongClick:长按事件。 .................................................................................. 5
3) onCreateContextMenu:上下文菜单事件。 .......................................................... 6
4) onFocusChange:焦点事件。 .............................................................................. 7
5) onTouchEvent:触屏事件。 ................................................................................ 7
6) onKeyUp、onKeyDown:键盘或遥控事件。 ....................................................... 8
7) onTrackballEvent:轨迹球事件。 ........................................................................ 8
一, 概念和种类
事件是用户与应用的UI交互的动作。在android中有许许多多的事件,即使是一个简
单的单击事件,也有按下、弹起、长按之分。它们以监听接口和基于回调方式进行划分
的。下面列出几种常用的事件:
1, onClick:按钮单击事件。
2, onLongClick:长按事件。
3, onCreateContextMenu:上下文菜单事件。
4, onFocusChange:焦点事件。
5, onTouchEvent:触屏事件。
6, onKeyUp、onKeyDown:键盘或遥控事件。
7, onTrackballEvent:轨迹球事件。
二, 事件的用法。
在android平台中,每个View都有自己处理事件的回调方法,开发人员只需要重写这
些回调方法,就可以实现需要的响应事件。
1/9
国微技术 李良成
上图是一个简单的应用实例。程序的主入口是MainActivity,与之对应的布局文件是
res/layout/ ,在布局文件中有一个id为button的按钮。
单击事件只需要注册相应的监听器(setOnClickListener)监听事件的来源,当事件发生
时作出相应的处理。
键盘或遥控事件只需重写父类Activity的(onKeyDown)方法(父类已经封装好了接口),
通过接收不同的键值作出相应的处理。
三, 事件的过程及原理
事件过程原理:
2/9
国微技术 李良成
1, 为事件源对象添加监听,这样当某个事件被触发时,系统才会知道通知谁来处
理该事件,如图(A)所示。
2, 当事件发生时,系统会将事件封装成相应类型的事件对象,并发送给注册到事
件源的事件监听器,如图(B)所示。
3, 当监听器对象接收到事件对象之后,系统会调用监听器中相应的事件处理方法
来处理事件并给出响应,如图(C)所示。
事件机制原理:
通过上面事件过程原理的描述,我们大概能明白处理事件的一般步骤。下面我们就
来分析系统是如何监听到一个输入设备事件的,又是利用何种方式将这种事件层层传递
给应用层并作出响应的。这是个看似简单的过程,实际浩大的工程,我们且称之为事件
系统或事件机制。
下图为android事件大体传递过程:
下图为android事件具体实现过程:
3/9
国微技术 李良成
如图示,自下而上层层剖析:
系统在启动过程中会加载驱动程序。
加载驱动程序时会进入到EventHub(文件位置:
/frameworks/base/libs/ui/),会执行openPlatformInput(void)这一函数(函数
位置:文件的第421~454行),该函数主要功能是扫描/dev/input目录,获取输入设备
(/dev/input下通常是关于Event类型的驱动设备)。通过不断循环读取目录文件,最后
通过open_device()打开设备。
EventHub实现了对驱动程序的控制,并从中获得信息KeyLayout(按键布局)和
KeyCharacterMap(按键字符映射)。定义按键布局和按键字符映射需要运行时配置文件
的支持,它们的后缀名分别为kl和kcm
4/9
国微技术 李良成
在framework层具有KeyInputDevice等类用于处理由EventHub传送上来的信息,
通常信息由数据结构RawInputEvent和KeyEvent来表示。通常情况下,对于按键事件,
则直接使用KeyEvent来传送给应用程序层,对于触摸屏和轨迹球等事件,则由
RawInputEvent经过转换后,形成MotionEvent传送给应用程序层。
在Android的应用程序层中,通过重新实现onTouchEvent和onTrackballEvent等函
数来接收运动事件(MotionEvent),通过重新实现onKeyDown和onKeyUp等函数来接
收按键事件(KeyEvent)。这些类包含在包中。
小常识:创建一个Activity时需继承一个父类Activity,而父类Activity中已经申
明了各个事件的接口和方法。子类继承父类后拥有父类非private得属性和功能;
四, android事件的常用方法
1) onClick:按钮单击事件。
(1) 通过组件ID获取组件实例。
(2) 为该组件注册OnClickListener监听。
(3) 实现onClick方法。
代码实例:
2) onLongClick:长按事件。
(1) 通过组件ID获取组件实例。
(2) 为该组件注册OnLongClickListener监听。
(3) 实现onClick方法。
代码实例:
5/9
国微技术 李良成
3) onCreateContextMenu:上下文菜单事件。Android的上下文菜单在概念上和PC软件
的右键菜单类似。当一个视图注册到一个上下文菜单时,执行一个在该对象上的“长
按”(按住不动差不多两秒钟)动作,将出现一个提供相关功能的浮动菜单。上下文
菜单可以被注册到任何视图对象中,不过,最常见的是用于列表视图ListView的
item,在按中列表项时,会转换其背景色而提示将呈现上下文菜单。 (电话联系人
列表提供了关于这个特性的一个很好的例子)。
(1) 通过组件ID获取组件实例。
(2) 为该组件注册onCreateContextMenuListener监听。
(3) 实现onCreateContextMenu方法。
代码示例:
上图中的事件的结果是:当你把焦点移动到该控件上时,长按会弹出对话框,对话框中
的Edit、Delete、Select组成列表。
当然,有列表操作,就该有相应的事件。很明显,在这里继续添加点击事件已经不现
实,会使代码臃肿,程序层次太深,容易引发ANR异常。还好,Android已经提供了解
决的办法。上图中的事件一般会与下图方法结合使用:
6/9
国微技术 李良成
注意:a,上下文菜单项不支持图标或快捷键。
b,第一幅图的事件函数是以内部类的形式实现的,而第二幅图的函数只是一
个重写了父类方法的普通函数。
4) onFocusChange:焦点事件。上面说到单击事件就是指单击某个组件时触发的事情,
而焦点事件则是只要该组件获得焦点,不用点击就会触发相应的事件。
(1) 通过组件ID获取组件实例。
(2) 为该组件注册onFocusChange Listener监听。
(3) 实现onFocusChange方法。
代码实例:
5) onTouchEvent:触屏事件。在View范围内触摸按下、抬起或滑动,都会触发该事件。
(1) 通过组件ID获取组件实例。
(2) 为该组件注册onTouchEvent Listener监听。
(3) 实现onTouchEvent方法。
代码实例
7/9
国微技术 李良成
6)onKeyUp、onKeyDown:键盘或遥控事件。onKeyUp指当按键弹起,onKeyDown表示
按键按下。
方法:直接在类中,重写父类的方法。
代码实例
7)onTrackballEvent:轨迹球事件。
下图是一款HTC G3的手机,图中所示的轨迹球接收轨迹球事件。(图中所述是一
个向鼠标滚轮的小球,通过滚动这个小球来控制方向。在HTC G7上则去除了滚轮
采用光电形式,不过接收的事件都是一样)
8/9
国微技术 李良成
实例代码
国微技术 李良成
2011-12-5
9/9