Android应用程序中事件处理.doc_第1页
Android应用程序中事件处理.doc_第2页
Android应用程序中事件处理.doc_第3页
Android应用程序中事件处理.doc_第4页
Android应用程序中事件处理.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android应用程序中事件处理2012.8.26一、事件相关概述在图形界面(UI)的开发中,有两个非常重要的内容:一个是控件的布局,另一个就是控件的事件处理,其中,控件的布局已经在/u/2726952293中“Android UI基础知识”部分已经说明,本部分主要对事件的处理进行分析。Android应用程序中事件的处理秉承了JavaSE图形用户界面的处理方式和风格。Android在事件处理过程中主要涉及到3个概念:1)事件:表示用户在图形界面的操作的描述,通常是封装成各种类,比如:键盘事件操作相关的类为KeyEvent、触摸屏相关的移动事件类为MotionEvent等,在后面我们将专门列出相关的事件。2)事件源:事件源是指事件发生的场所,通常是指各个控件,例如:Button、EditText等控件。3)事件处理者:事件处理者是指接收事件对象并对其进行处理的对象,事件处理一般是一个实现某些特定接口类创建的对象。二、事件处理模型事件处理模型通常有三种方式:接口实现事件处理模型、内部类事件处理模型和匿名内部类事件处理模型三种。下面以响应Button事件源,单击事件以及弹出响应结果为例说明以上三种事件处理模型。1、接口实现事件处理模型以下Button按钮响应机制为:单击Button的时候,屏幕上的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.widget.Button;import android.widget.TextView;public class TestActivity extends Activity implements OnClickListener Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.main);/* 以下是定义Button按钮 */Button mybutton = (Button) findViewById(R.id.mybutton);/* 绑定接口 */mybutton.setOnClickListener(this);Overridepublic void onClick(View v) switch (v.getId() case R.id.mybutton:TextView mytext = (TextView) findViewById(R.id.mytext);mytext.setText(你好!);配置文件AndroidManifest.xml代码如下: 运行前后对比,如图2所示:图2 响应前后结果对比从上面实现过程可以看出,实现接口到达对事件的处理主要是继承并完成OnClickListener接口中的onClick方法,并且将其绑定在事件源中,从而达到事件处理的效果。2、内部类事件处理模型我们将运用接口类实现事件处理模型中的布局文件和配置文件,主要是对Activity中的事件处理方法进行改造,这样写也有利益我们学习。内部类事件处理模型的Activity代码如下:package com.wjy.usersrc;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class TestActivity extends Activity TextView mytext = null;Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.main);/* 以下是定义Button按钮 */Button mybutton = (Button) findViewById(R.id.mybutton);mytext = (TextView) findViewById(R.id.mytext);mybutton.setOnClickListener(new clicklistener();class Clicklistener implements OnClickListener Overridepublic void onClick(View v) switch (v.getId() case R.id.mytext:mytext.setText(你好);备注:Clicklistener类也可以做成一个普通的类,不一定必须做成内部类,做成普通类完全与内部类效果一样。3、匿名内部类事件处理模型其实内匿名内部类处理方式在官方采用的源代码中也应用非常多,下面将以上事件处理过程通过匿名内部类实现,它的布局文件和配置文件与前面应用的一样,只是在Activity中的事件处理代码有所不同,其代码如下:package com.wjy.usersrc;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class TestActivity extends Activity Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.main);/* 以下是定义Button按钮 */Button mybutton = (Button) findViewById(R.id.mybutton);final TextView mytext = (TextView) findViewById(R.id.mytext);mybutton.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) switch (v.getId() case R.id.mytext:mytext.setText(你好!););通过以上三种方式我们可以看出,事件处理的模型都是实现接口中的onClick方法,并且绑定于特定的事件源,从而达到事件的处理。其中,接口实现方法和内部类都是通过继承接口OnClickListener中的onClick方法;匿名内部类实现方法则是通过覆盖onClick方法。三、Activity中常见的事件从处理事件过程来说,Activity是一个事件源,了解其中可能出现的事件能够为开发服务,下面我们将对Activity中常见的事件进行分析,常见的事件包括:触摸事件、键盘事件和菜单事件。1、触摸事件Android系统中,支持触摸屏的开发,触摸屏事件主要是通过运行事件(MotionEvent)接收消息,若触摸事件源是Activity的话则需要重写方法:以下以界面中事件来源主要包括按钮和触摸,响应程序如下所示: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 extends Activity TextView mytext01 = null;Overridepublic 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 mybutton02 = (Button) findViewById(R.id.mybutton02);mybutton02.setOnClickListener(new clicklistener();mybutton01.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) mytext01.setText(mybutton01););class clicklistener implements OnClickListener Overridepublic void onClick(View v) if (v.getId() = R.id.mybutton02)mytext01.setText(mybutton02);Overridepublic 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;其布局文件如下:触摸屏幕的响应结果如下图3所示:图3 触摸屏幕(除按钮以外的区域)响应结果2、菜单事件Android的菜单事件与网页中的菜单事件相似,正常情况下都是隐藏的,其主要目的是节省空间,而要调用的时候刚点击menu按钮就弹出来。编写菜单事件一般情况下分成两步:1)创建和初始化菜单2)菜单项事件处理以下是增加了三个子菜单的示例代码:package com.wjy.java;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;public class UserActivity extends Activity private TextView mytext = null;private final int first = Menu.FIRST;private final int second = Menu.FIRST + 1;private final int third = Menu.FIRST + 2;Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.main);mytext = (TextView) findViewById(R.id.mytext);mytext.setText(初始状态);Overridepublic boolean onCreateOptionsMenu(Menu menu) super.onCreateOptionsMenu(menu);/ 第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。/ 第二个int类型的item ID参数,代表的是项目编号。/ 这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。/ 第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论