《android应用程序中事件处理》由会员分享,可在线阅读,更多相关《android应用程序中事件处理(10页珍藏版)》请在金锄头文库上搜索。
1、Android 应用程序中事件处理应用程序中事件处理2012.8.26一、事件相关概述一、事件相关概述在图形界面(UI)的开发中,有两个非常重要的内容:一个是控件的布局,另一个就 是控件的事件处理,其中,控件的布局已经在 http:/ 中“Android UI 基础知识”部分已经说明,本部分主要对事件的处理进行分析。Android 应用 程序中事件的处理秉承了 JavaSE 图形用户界面的处理方式和风格。 Android 在事件处理过程中主要涉及到 3 个概念: 1)事件:表示用户在图形界面的操作的描述,通常是封装成各种类,比如:键盘事件 操作相关的类为 KeyEvent、触摸屏相关的移动事件
2、类为 MotionEvent 等,在后面我们将专 门列出相关的事件。 2)事件源:事件源是指事件发生的场所,通常是指各个控件,例如: Button、EditText 等控件。 3)事件处理者:事件处理者是指接收事件对象并对其进行处理的对象,事件处理一般 是一个实现某些特定接口类创建的对象。二、事件处理模型二、事件处理模型事件处理模型通常有三种方式:接口实现事件处理模型、内部类事件处理模型和匿名 内部类事件处理模型三种。下面以响应 Button 事件源,单击事件以及弹出响应结果为例说 明以上三种事件处理模型。1、接口实现事件处理模型接口实现事件处理模型以下 Button 按钮响应机制为:单击 B
3、utton 的时候,屏幕上的 TextView 中输出“你好! ” 。 通过 DroidDraw 设计的带 Button 按钮的布局,如图 1 所示:图 1 布局文件的设计 其中,布局代码如下:以下代码为在 Activity 中实现接口,并且绑定在 Button 按钮上: package com.wjy.usersrc; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.
4、widget.Button; import android.widget.TextView;public class TestActivity extends Activity implements OnClickListener Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main);/* 以下是定义 Button 按钮 */ Button mybutton = (Button) findViewById
5、(R.id.mybutton);/* 绑定接口 */ mybutton.setOnClickListener(this); Override public void onClick(View v) switch (v.getId() case R.id.mybutton: TextView mytext = (TextView) findViewById(R.id.mytext);mytext.setText(“你好!“); 配置文件 AndroidManifest.xml 代码如下:运行前后对比,如图 2 所示:图 2 响应前后结果对比 从上面实现过程可以看出,实现接口到达对事件的处理主要是
6、继承并完成 OnClickListener 接口中的 onClick 方法,并且将其绑定在事件源中,从而达到事件处理的效 果。2、内部类事件处理模型、内部类事件处理模型我们将运用接口类实现事件处理模型中的布局文件和配置文件,主要是对 Activity 中的 事件处理方法进行改造,这样写也有利益我们学习。 内部类事件处理模型的 Activity 代码如下: package com.wjy.usersrc;import android.app.Activity; import android.os.Bundle; import android.view.View; import android.v
7、iew.View.OnClickListener; import android.widget.Button; import android.widget.TextView;public class TestActivity extends Activity TextView mytext = null;Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.main);/* 以下是定义 Button 按钮 */ But
8、ton mybutton = (Button) findViewById(R.id.mybutton); mytext = (TextView) findViewById(R.id.mytext); mybutton.setOnClickListener(new clicklistener(); class Clicklistener implements OnClickListener Override public void onClick(View v) switch (v.getId() case R.id.mytext:mytext.setText(“你好“); 备注:Clickli
9、stener 类也可以做成一个普通的类,不一定必须做成内部类,做成普通类 完全与内部类效果一样。3、匿名内部类事件处理模型、匿名内部类事件处理模型其实内匿名内部类处理方式在官方采用的源代码中也应用非常多,下面将以上事件处 理过程通过匿名内部类实现,它的布局文件和配置文件与前面应用的一样,只是在 Activity 中的事件处理代码有所不同,其代码如下: package com.wjy.usersrc;import android.app.Activity; import android.os.Bundle; import android.view.View; import android.vie
10、w.View.OnClickListener; import android.widget.Button; import android.widget.TextView;public class TestActivity extends Activity Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main);/* 以下是定义 Button 按钮 */ Button mybutton = (Button)
11、findViewById(R.id.mybutton); final TextView mytext = (TextView) findViewById(R.id.mytext); mybutton.setOnClickListener(new OnClickListener() Override public void onClick(View v) switch (v.getId() case R.id.mytext:mytext.setText(“你好!“); ); 通过以上三种方式我们可以看出,事件处理的模型都是实现接口中的 onClick 方法,并 且绑定于特定的事件源,从而达到事件
12、的处理。其中,接口实现方法和内部类都是通过 继承接口 OnClickListener 中的 onClick 方法;匿名内部类实现方法则是通过覆盖 onClick 方 法。三、三、Activity 中常见的事件中常见的事件从处理事件过程来说,Activity 是一个事件源,了解其中可能出现的事件能够为开发服 务,下面我们将对 Activity 中常见的事件进行分析,常见的事件包括:触摸事件、键盘事件 和菜单事件。1、触摸事件、触摸事件Android 系统中,支持触摸屏的开发,触摸屏事件主要是通过运行事件 (MotionEvent)接收消息,若触摸事件源是 Activity 的话则需要重写方法:
13、以下以界面中事件来源主要包括按钮和触摸,响应程序如下所示: package com.wjy.usersrc;import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView;public class TestActivity ext
14、ends Activity TextView mytext01 = null;Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.main);/* 以下是定义 Button 按钮 */ mytext01 = (TextView) findViewById(R.id.mytext01); Button mybutton01 = (Button) findViewById(R.id.mybutton01); Button
15、 mybutton02 = (Button) findViewById(R.id.mybutton02); mybutton02.setOnClickListener(new clicklistener();mybutton01.setOnClickListener(new OnClickListener() Override public void onClick(View v) mytext01.setText(“mybutton01“); );class clicklistener implements OnClickListener Override public void onCli
16、ck(View v) if (v.getId() = R.id.mybutton02) mytext01.setText(“mybutton02“); Override public boolean onTouchEvent(MotionEvent event) TextView mytext02=(TextView)findViewById(R.id.mytext02); int Action=event.getAction(); float x=event.getX(); float y=event.getY(); mytext01.setText(“Action is:“+Action); mytext02.setText(“Postion is:“+“(“+x+“,“+y+“)“); return true; 其布局文件如下:触摸屏幕的响应结果如下