当前位置:文档之家› 浅谈Android事件原理

浅谈Android事件原理

浅谈Android事件原理
浅谈Android事件原理

浅谈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都有自己处理事件的回调方法,开发人员只需要重写这些回调方法,就可以实现需要的响应事件。

上图是一个简单的应用实例。程序的主入口是MainActivity,与之对应的布局文件是res/layout/main.xml ,在布局文件中有一个id为button的按钮。

单击事件只需要注册相应的监听器(setOnClickListener)监听事件的来源,当事件发生时作出相应的处理。

键盘或遥控事件只需重写父类Activity的(onKeyDown)方法(父类已经封装好了接口),通过接收不同的键值作出相应的处理。

三,事件的过程及原理

事件过程原理:

1,为事件源对象添加监听,这样当某个事件被触发时,系统才会知道通知谁来处理该事件,如图(A)所示。

2,当事件发生时,系统会将事件封装成相应类型的事件对象,并发送给注册到事件源的事件监听器,如图(B)所示。

3,当监听器对象接收到事件对象之后,系统会调用监听器中相应的事件处理方法来处理事件并给出响应,如图(C)所示。

●事件机制原理:

通过上面事件过程原理的描述,我们大概能明白处理事件的一般步骤。下面我们就来分析系统是如何监听到一个输入设备事件的,又是利用何种方式将这种事件层层传递给应用层并作出响应的。这是个看似简单的过程,实际浩大的工程,我们且称之为事件系统或事件机制。

下图为android事件大体传递过程:

下图为android事件具体实现过程:

如图示,自下而上层层剖析:

?系统在启动过程中会加载驱动程序。

?加载驱动程序时会进入到EventHub(文件位置:/frameworks/base/libs/ui/EventHub.cpp),会执行openPlatformInput(void)这一函数(函数位置:文件的第421~454行),该函数主要功能是扫描/dev/input目录,获取输入设备(/dev/input下通常是关于Event类型的驱动设备)。通过不断循环读取目录文件,最后通过open_device()打开设备。

?EventHub实现了对驱动程序的控制,并从中获得信息KeyLayout(按键布局)和KeyCharacterMap(按键字符映射)。定义按键布局和按键字符映射需要运行时配置文件的支持,它们的后缀名分别为kl和kcm

?在framework层具有KeyInputDevice等类用于处理由EventHub传送上来的信息,通常信息由数据结构RawInputEvent和KeyEvent来表示。通常情况下,对于按键事件,则直接使用KeyEvent来传送给应用程序层,对于触摸屏和轨迹球等事件,则由RawInputEvent经过转换后,形成MotionEvent传送给应用程序层。

?在Android的应用程序层中,通过重新实现onTouchEvent和onTrackballEvent等函数来接收运动事件(MotionEvent),通过重新实现onKeyDown和onKeyUp等函数来接收按键事件(KeyEvent)。这些类包含在android.view包中。

小常识:创建一个Activity时需继承一个父类Activity,而父类Activity中已经申明了各个事件的接口和方法。子类继承父类后拥有父类非private得属性和功能;

四,android事件的常用方法

1)onClick:按钮单击事件。

(1)通过组件ID获取组件实例。

(2)为该组件注册OnClickListener监听。

(3)实现onClick方法。

代码实例:

2)onLongClick:长按事件。

(1)通过组件ID获取组件实例。

(2)为该组件注册OnLongClickListener监听。

(3)实现onClick方法。

代码实例:

3)onCreateContextMenu:上下文菜单事件。Android的上下文菜单在概念上和PC软件的右键菜单类似。当一个视图注册到一个上下文菜单时,执行一个在该对象上的“长按”(按住不动差不多两秒钟)动作,将出现一个提供相关功能的浮动菜单。上下文菜单可以被注册到任何视图对象中,不过,最常见的是用于列表视图ListView的item,在按中列表项时,会转换其背景色而提示将呈现上下文菜单。(电话联系人列表提供了关于这个特性的一个很好的例子)。

(1)通过组件ID获取组件实例。

(2)为该组件注册onCreateContextMenuListener监听。

(3)实现onCreateContextMenu方法。

代码示例:

上图中的事件的结果是:当你把焦点移动到该控件上时,长按会弹出对话框,对话框中的Edit、Delete、Select组成列表。

当然,有列表操作,就该有相应的事件。很明显,在这里继续添加点击事件已经不现实,会使代码臃肿,程序层次太深,容易引发ANR异常。还好,Android已经提供了解决的办法。上图中的事件一般会与下图方法结合使用:

注意:a,上下文菜单项不支持图标或快捷键。

b,第一幅图的事件函数是以内部类的形式实现的,而第二幅图的函数只是一个重写了父类方法的普通函数。

4)onFocusChange:焦点事件。上面说到单击事件就是指单击某个组件时触发的事情,而焦点事件则是只要该组件获得焦点,不用点击就会触发相应的事件。

(1)通过组件ID获取组件实例。

(2)为该组件注册onFocusChange Listener监听。

(3)实现onFocusChange方法。

代码实例:

5)onTouchEvent:触屏事件。在View范围内触摸按下、抬起或滑动,都会触发该事件。

(1)通过组件ID获取组件实例。

(2)为该组件注册onTouchEvent Listener监听。

(3)实现onTouchEvent方法。

代码实例

6)onKeyUp、onKeyDown:键盘或遥控事件。onKeyUp指当按键弹起,onKeyDown表示按键按下。

方法:直接在类中,重写父类的方法。

代码实例

7)onTrackballEvent:轨迹球事件。

下图是一款HTC G3的手机,图中所示的轨迹球接收轨迹球事件。(图中所述是一个向鼠标滚轮的小球,通过滚动这个小球来控制方向。在HTC G7上则去除了滚轮采用光电形式,不过接收的事件都是一样)

实例代码

国微技术李良成

2011-12-5

安卓按钮单击事件

第一种:匿名内部类作为事件监听器类 大部分时候,事件处理器都没有什么利用价值(可利用代码通常都被抽象成了业务逻辑方法),因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适,实际上,这种形式是目前是最广泛的事件监听器形式。上面的程序代码就是匿名内部类来创建事件监听器的!!! 对于使用匿名内部类作为监听器的形式来说,唯一的缺点就是匿名内部类的语法有点不易掌握,如果读者java基础扎实,匿名内部类的语法掌握较好,通常建议使用匿名内部类作为监听器。 第二种:内部类作为监听器 将事件监听器类定义成当前类的内部类。1、使用内部类可以在当前类中复用监听器类,因为监听器类是外部类的内部类,2、所以可以自由访问外部类的所有界面组件。这也是内部类的两个优势。上面代码就是内部类的形式!! 第三种:Activity本身作为事件监听器

这种形式使用activity本身作为监听器类,可以直接在activity类中定义事件处理器方法,这种形式非常简洁。但这种做法有两个缺点:(1)这种形式可能造成程序结构混乱。Activity 的主要职责应该是完成界面初始化;但此时还需包含事件处理器方法,从而引起混乱。(2)如果activity界面类需要实现监听器接口,让人感觉比较怪异。 上面的程序让Activity类实现了OnClickListener事件监听接口,从而可以在该Activity类中直接定义事件处理器方法:onClick(view v),当为某个组件添加该事件监听器对象时,直接使用this作为事件监听器对象即可。 第四种:外部类作为监听器 ButtonTest类 当用户单击button按钮时,程序将会触发MyButtonListener监听器 外部MyButtonListener类

AndroidUI基本控件与事件处理

《Android基础应用》 AndroidUI基本控件与事件处理 ?本章任务 ?使用Android开发本息计算器程序 ?使用Android开发华氏-摄氏温度转换器 ?本章目标 ?熟悉掌握本章基本控件的使用 ?熟练掌握Android常用事件 1.Android基本控件 Android应用开发的一项内容就是用户界面的开发,Android提供了大量功能丰富的UI组件,大部分放在android.widget包及其子包android.view包及其子包 在Android当中View类是最基本的一个UI类,基本上所有的高级UI组件都是继承View类而实现的。如Button(按钮),list(列表),EditText(编辑框),RadioButton(多选按钮),Checkbox(选择框)等都是View类 在Android中,我们可以在Xml文件中使用UI组件也可以在java文件中创建UI组件官方建议采用xml方式,这样的话能够实现界面和代码分离 1.1TextView和EditText TextView是一种用于显示字符串的控件 EditText则是用来输入和编辑字符串的控件,EditText是一个具有编辑功能的TextView

TextView和EditText基本属性 ●android:id设置ID,通过编码可以找到这个组件 ●android:layout_width设置在屏幕上的宽度 ●android:layout_height设置在屏幕上的高度 fill_parent强制性地使构件扩展,以填充布局单元内尽可能多的空间 wrap_content强制性地使视图扩展以显示全部内容 ●android:text设置显示的文本信息 ●android:textColor设置文本颜色 ●android:textSize设置文本尺寸

Android OnTouchListener触屏事件接口

Android OnTouchListener触屏事件接口 OnTouchListener接口是用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。该接口中的监听方法签名如下。 Java代码: public boolean onT ouch(View v, MotionEvent event) 参数v:参数v同样为事件源对象。 参数event:参数event为事件封装类的对象,其中封装了触发事件的详细信息,同样包括事件的类型、触发时间等信息。 节中介绍了一个在屏幕中拖动矩形移动的案例,本节将继续采用该案例的思路,通过监听接口的方式实现在屏幕上拖动按钮移动的案例。开发步骤如下。 创建一个名为Sample的Android项目。 准备字符串资源,打开strings.xml文件,用下列代码替换原有代码。 Java代码: Hello World, Sample Sample 位置 说明:与前面介绍的案例相同,对程序中用到的字符串资源进行定义。 开发布局文件。打开res/layout目录下的main.xml,用下列代码替换其原有代码。

Java代码:

相关文档 最新文档