新的课件情景2activity程序开发_第1页
新的课件情景2activity程序开发_第2页
新的课件情景2activity程序开发_第3页
新的课件情景2activity程序开发_第4页
新的课件情景2activity程序开发_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、情景2:Activity程序开发事件3.5.1 onKeyDown方法简介onKeyDown方法是接口KeyEvent.Callback中的抽象方法,所有的View全部实现了该接口并重写了该方法,该方法用来捕捉手机键盘被按下的事件。方法的声明格式如下所示:publicbooleanonKeyDown(intkeyCode,KeyEventevent)参数keyCode,为被按下的键值即键盘码,手机键盘中每个按钮都会有其单独的键盘码,在应用程序都是通过键盘码才知道用户按下的是哪个键。参数event,为按键事件的对象,其中包含了触发事件的详细信息,例如事件的状态、事件的类型、事件发生的时间等。当用

2、户按下按键时,系统会自动将事件封装成KeyEvent对象供应用程序使用。返回值,该方法的返回值为一个boolean类型的变量,当返回true时,表示已经完整地处理了这个事件,并不希望其他的回调方法再次进行处理,而当返回false时,表示并没有完全处理完该事件,更希望其他回调方法继续对其进行处理,例如Activity中的回调方法。3.5.2 onKeyUp方法简介onKeyUp方法的原理及使用方法与onKeyDown方法基本一样,只是该方法会在按键抬起时被调用。如果用户需要对按键抬起事件进行处理,通过重写该方法可以实现。该方法同样是接口KeyEvent.Callback中的一个抽象方法,并且所有

3、的View同样全部实现了该接口并重写了该方法,onKeyUp方法用来捕捉手机键盘按键抬起的事件,方法的声明格式如下所示:publicbooleanonKeyUp(intkeyCode,KeyEventevent)参数keyCode:同样为触发事件的按键码,需要注意的是,同一个按键在不同型号的手机中的按键码可能不同。参数event:同样为事件封装类的对象,其含义与onKeyDown方法中的完全相同,在此不再赘述。返回值:该方法返回值表示的含义与onKeyDown方法相同,同样通知系统是否希望其他回调方法再次对该事件进行处理。3.5.3onTouchEvent方法简介onTouchEvent事件方

4、法是手机屏幕事件的处理方法。该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理手机屏幕的触摸事件。该方法的声明格式如下所示:publicbooleanonTouchEvent(MotionEventevent)参数event:为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸手机屏幕时被创建。返回值:该方法的返回值机理与键盘响应事件的相同,同样是当已经完整地处理了该事件且不希望其他回调方法再次处理时返回true,否则返回false。3.5.3onTouchEvent方法简介该方法

5、并不像之前介绍过的方法只处理一种事件,一般情况下以下三种情况的事件全部由onTouchEvent方法处理,只是三种情况中的动作值不同。屏幕被按下事件:当屏幕被按下时,会自动调用该方法来处理事件,此时MotionEvent.getAction()的值为MotionEvent.ACTION_DOWN,如果在应用程序中需要处理屏幕被按下的事件,只需重新回调该方法,然后在方法中进行动作的判断即可。屏幕被抬起事件:当触控笔离开屏幕时触发的事件,该事件同样需要onTouchEvent方法来捕捉,然后在方法中进行动作判断。当MotionEvent.getAction()的值为MotionEvent.ACTI

6、ON_UP时,表示是屏幕被抬起的事件。在屏幕中拖动事件:该方法还负责处理触控笔在屏幕上滑动的事件,同样是调用MotionEvent.getAction()方法来判断动作值是否为MotionEvent.ACTION_MOVE再进行处理。3.5.4 onTrackBallEvent方法和onFocusChanged方法简介onTrackBallEvent是手机中轨迹球的处理方法。所有的View同样全部实现了该方法。该方法的声明格式如下:publicbooleanonTrackballEvent(MotionEventevent)参数event:为手机轨迹球事件封装类的对象,其中封装了触发事件的详细

7、信息,同样包括事件的类型、触发时间等,一般情况下,该对象会在用户操控轨迹球时被创建。返回值:该方法的返回值与前面介绍的各个回调方法的返回值机制完全相同。3.5.4 onTrackBallEvent方法和onFocusChanged方法简介轨迹球与手机键盘的区别如下所示。1、某些型号的手机设计出的轨迹球会比只有手机键盘时更美观,可增添用户对手机的整体印象。2、轨迹球使用更为简单,例如在某些游戏中使用轨迹球控制会更为合理。3、使用轨迹球会比键盘更为细化,即滚动轨迹球时,后台的表示状态的数值会变化得更细微、更精准。该方法的使用方法与前面介绍过的各个回调方法基本相同,可以在Activity中重写该方法

8、,也可以在各个View的实现类中重写。提示:在模拟器运行状态下,可以通过F6键打开模拟器的轨迹球,然后便可以通过鼠标的移动来模拟轨迹球事件。3.5.4 onTrackBallEvent方法和onFocusChanged方法简介onFocusChanged只能在View中重写,该方法是焦点改变的回调方法,当某个控件重写了该方法后,当焦点发生变化时,会自动调用该方法来处理焦点改变的事件。该方法的声明格式如下。protectedvoidonFocusChanged(booleangainFocus,intdirection,RectpreviouslyFocusedRect)参数gainFocus:

9、表示触发该事件的View是否获得了焦点,当该控件获得焦点时,gainFocus等于true,否则等于false。参数direction:表示焦点移动的方向,用数值表示,有兴趣的读者可以重写View中的该方法打印该参数进行观察。参数previouslyFocusedRect:表示在触发事件的View的坐标系中,前一个获得焦点的矩形区域,即表示焦点是从哪里来的。如果不可用则为null。3.5.4 onTrackBallEvent方法和onFocusChanged方法简介表3-22 焦点有关的常用方法表方法名称方法说明setFocusable()设置View是否可以拥有焦点isFocusable()

10、监测此View是否可以拥有焦点setNextFocusDownId()setNextFocusLeftId()setNextFocusRightId()setNextFocusUpId()设置View的焦点向上、下、左、右移动后获得焦点View的IDhasFocus()返回了View的父控件是否获得了焦点requestFocus()尝试让此View获得焦点isFocusableInTouchMode()设置View是否可以在触摸模式下获得焦点,在默认情况下是不可用获得的3.5.5 OnClickListener接口简介对于一个Android应用程序来说,事件处理是必不可少的,用户与应用程序之间

11、的交互便是通过事件处理来完成的。当用户与应用程序交互时,一定是通过触发某些事件来完成的,让事件来通知程序应该执行那些操作,在这个繁杂的过程中主要涉及两个对象,事件源与事件监听器。事件源指的是事件所发生的控件,各个控件在不同情况下触发的事件不尽相同,而且产生的事件对象也可能不同。监听器则是用来处理事件的对象,实现了特定的接口,根据事件的不同重写不同的事件处理方法来处理事件。将事件源与事件监听器联系到一起,就需要为事件源注册监听,当事件发生时,系统才会自动通知事件监听器来处理相应的事件。3.5.5 OnClickListener接口简介图3-40 事件处理流程图3.5.5 OnClickListe

12、ner接口简介事件处理的过程一般分为三步,如下所示。应该为事件源对象添加监听,这样当某个事件被触发时,系统才会知道通知谁来处理该事件,如事件处理流程图3-40(A)所示。当事件发生时,系统会将事件封装成相应类型的事件对象,并发送给注册到事件源的事件监听器,如事件处理流程图3-40(B)所示。当监听器对象接收到事件对象之后,系统会调用监听器中相应的事件处理方法来处理事件并给出响应,如事件处理流程图3-40(C)所示。OnClickListener接口,是处理的点击事件。在触控模式下,是在某个View上按下并抬起的组合动作,而在键盘模式下,是某个View获得焦点后点击确定键或者按下轨迹球事件。该接

13、口对应的回调方法签名如下:publicvoidonClick(Viewv); 参数v便为事件发生的事件源。3.5.5 OnLongClickListener接口简介OnLongClickListener接口,该接口与OnClickListener接口原理基本相同,只是该接口为View长按事件的捕捉接口,即当长时间按下某个View时触发的事件,该接口对应的回调方法为:publicbooleanonLongClick(Viewv) 参数v:为事件源控件,当长时间按下此控件时才会触发该方法。返回值:该方法的返回值为一个boolean类型的变量,当返回true时,表示已经完整地处理了这个事件,并不希望

14、其他的回调方法再次进行处理;当返回false时,表示并没有完全处理完该事件,更希望其他方法继续对其进行处理。 我们只需要修改Example_OnClickListene项目里面的三个地方,就可测试该接口的使用方法。其一为定义类的接口为OnLongClickListener,其二在绑定监听器时修改为:button.setLongOnClickListener(this);其三把实现监听方法该为:public boolean onLongClick(View v) /实现事件监听方法 textView.setText(您选择了 + (Button)v).getText()+,欢迎你!); retu

15、rn true;3.5.6 OnFocusChangeListener接口简介OnFocusChangeListener接口用来处理控件焦点发生改变的事件。如果注册了该接口,当某个控件失去焦点或者获得焦点时都会触发该接口中的回调方法,该接口对应的回调方法声明格式如下。 publicvoidonFocusChange(Viewv,BooleanhasFocus) 参数v: 便为触发该事件的事件源;参数hasFocus: 表示v的新状态,即v是否是获得焦点。3.5.7 OnKeyListener接口简介OnKeyListener是对手机键盘进行监听的接口,通过对某个View注册该监听,当View获

16、得焦点并有键盘事件时,便会触发该接口中的回调方法。该接口中的抽象方法声明格式如下:publicbooleanonKey(Viewv,intkeyCode,KeyEventevent)参数v:为事件的事件源控件。参数keyCode:为手机键盘的键盘码。参数event:便为键盘事件封装类的对象,其中包含了事件的详细信息,例如发生的事件、事件的类型等。3.5.8 OnTouchListener接口简介OnTouchListener接口是用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。该接口中的监听方法声明格式如下:publicbooleanonTouc

17、h(Viewv,MotionEventevent)参数v:同样为事件源对象。参数event:为事件封装类的对象,其中封装了触发事件的详细信息,同样包括事件的类型、触发时间等信息。3.5.9 OnCreateContextMenuListener接口简介OnCreateContextMenuListener接口是用来处理上下文菜单显示事件的监听接口。该方法是定义和注册上下文菜单的另一种方式。该接口中事件处理的回调方法签名如下所示。publicvoidonCreateContextMenu(ContextMenu menu,Viewv,ContextMenuInfoinfo)参数menu:为事件的

18、上下文菜单。参数v:为事件源View,当该View获得焦点时才可能接收该方法的事件响应。参数info:info对象中封装了有关上下文菜单额外的信息,这些信息取决于事件源View。该方法会在某个View中显示上下文菜单时被调用,开发人员可以通过实现该方法来处理上下文菜单显示时的一些操作。3.3 菜 单Android在平台下所提供的菜单大体上可以分为三类:选项菜单(Options Menu)、上下文菜单(Context Menu)、和子菜单(Submenu)。在用户界面中,除了经常用到菜单之外,对话框也是程序与用户进行交互的主要途径之一,Android平台下的对话框主要包括普通对话框、选项对话框、

19、单选多选对话框、日期与时间对话框、进度对话框等。3.3.1选项菜单和子菜单简介当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕底端弹出相应的选项菜单。但这个功能是需要开发人员编程来实现的,如果在开发应用程序时没有实现该功能,那么程序运用时按下手机上的Menu键是不会起作用的。对于携带图标的选项菜单,每次最多只能显示6个,当菜单选项多余6个时,将只显示前5个和一个扩展菜单选项,点击扩展菜单选项将会弹出其余的菜单项。扩展菜单项中将不会显示图标,但是可以显示单选按钮及复选框。在Android中通过回调方法来创建菜单并处理菜单按下的事件,除了开发回调方法onOptions

20、ItemSelected来处理用户选中事件,还可以为每个菜单项MenuItem对象添加onOptionsItemClickListener监听器来处理菜单选中事件。开发选项菜单主要用到Menu、MenuItem及SubMenu。3.3.1选项菜单和子菜单简介表3-17 选项菜单相关的回调方法及说明方 法 名描 述onCreateOptionsMenu(Menu menu)初始化选项菜单,该方法只在第一次显示菜单是调用,如果每次显示菜单时更新菜单项,则需要重写OnPrepareOptionsMenu(Menu)public boolean onOptionsItemSelected(MenuIt

21、em item)当选项菜单中某个选项被选中时调用该方法,默认的是一个返回false的空实现public void onOptionsMenuClosed(Menu menu)当选项菜单关闭时(或者由于用户按下了返回键或者是选择了某个菜单选项)调用该方法public boolean OnPrepareOptionsMenu(Menu menu)为程序准备选项菜单,每次选项菜单显示前会调用该方法。可以通过该方法设置某些菜单项可用或不可用或者修改菜单项的内容。重写该方法时需要返回true,否则选项菜单将不会显示3.3.1选项菜单和子菜单简介一个Menu对象代表一个菜单,Menu对象中可以添加菜单项M

22、enuItem,也可以添加子菜单SubMenu.表3-18 Menu的常用方法及说明方法名称参数说明方法说明MenuItem add(int groupId,int itemId,int order,Charsequence title);MenuItem add(int groupId,int itemId,int order,int titleRes);MenuItem add(Charsequence title);MenuItem add(int titleRes)groupId:菜单项所在的组id,通过分组可以对菜单项进行通过分组可以对菜单项进行批量操作,如果菜单项不需要属于任何组,

23、传入NONE;itemId:唯一标识菜单项的id,可传入NONE;order:菜单项的顺序,可传入NONE;title:菜单项显示的文本内容;titleRes:String对象的资源标识符向Menu添加一个菜单项,返回MenuItem对象3.3.1选项菜单和子菜单简介方法名称参数说明方法说明SubMenu addSubMenu(int titleRes);SubMenu addSubMenu(int groupId,int itemId,int order,int titleRes);SubMenu addSubMenu(Charsequence title);SubMenu addSubMe

24、nu(int groupId,int itemId,int order,Charsequence title)groupId:子菜单项所在的组id,通过分组可以对菜单项进行通过分组可以对菜单项进行批量操作,如果菜单项不需要属于任何组,传入NONE;itemId:唯一标识子菜单项的id,可传入NONE;order:子菜单项的顺序,可传入NONE;title:子菜单项显示的文本内容;titleRes:String对象的资源标识符向Menu添加一个子菜单项,返回SubMenu对象void clear()-移除菜单中所有的子项void close()-如果菜单正显示,关闭菜单MenuItem find

25、Item(int id)id:MenuItem的标识符返回指定id的MenuItem对象void removeGroup(int gronpld)groupId:组id如果指定id的组不为空,从菜单中移除改组void remove Item(int id)id:MenuItem的id移除指定id的MenuItemint size()-返回Menu中菜单项的个数3.3.1选项菜单和子菜单简介MenuItem对象代表一个菜单项,通常Menuitem实例通过Menu的add方法获得.表3-19 选项菜单相关的回调方法及说明方法名称参数说明方法说明setAlphabeticShortcut(char

26、alphaChar)alphaChar:字母快捷键设置MenuItem的字母快捷键MenuItem setNumericShortcut(char numericChar)numericChar:数字快捷键设置MenuItem的数字快捷键MenuItem setIcon(Drawable icon)icon:图标Drawable对象设置MenuItem的图标MenuItem setIntent(Intent intent)intent:与MenuItem绑定的intent对象为MenuItem绑定intent对象,当被选中时将会调用startActivity方法处理动作相应的Intent3.3

27、.1选项菜单和子菜单简介方法名称参数说明方法说明setOnMenuItemClickListener(MenuItem. OnMenuItemClickListener menuItemClickListener)menuItemClickListener:监听器为MenuItem设置自定义的监听器,一般情况下,使用回调方法onOptionsItemSelected会更有效率setShortcut(charnumericChar ,char alphaChar)numericChar:数字快捷键;alphaChar:字母快捷键为MenuItem设置数字快捷键和字母快捷键,当按下快捷键或按住Al

28、t键的同时按下快捷键时将会触发MenuItem的选中事件setTitle(int title)title:标题的资源id为MenuItem设置标题setTitle(charSequence title)title:标题的名称setTitleCondensed(charSequence title)title:MenuItem的缩略标题设置MenuItem的缩略标题,当MenuItem不能显示全部的标题时,显示缩略标题3.3.1选项菜单和子菜单简介SubMenu继承自Menu,每个SubMenu实例代表一个子菜单,SubMenu中常用的方法及说明如表3-20所示。方法名称参数说明方法说明setH

29、eaderIcon(Drawableicon)icon:标题图标Drawable对象设置子菜单的标题图标setHeaderIcon(int iconRes)iconRes:标题图标的资源idsetHeaderTitle(int titleRes)titleRes:标题文本的资源id设置子菜单的标题setHeaderTitle(charSequence title)title:标题文本对象setIcon(Drawableicon)icon:图标Drawable对象设置子菜单在父菜单中显示的标题setIcon(inticonRes)iconRes:图标资源idsetHeaderView(View

30、view)view:用于子菜单标题的View对象设置指定View对象作为子菜单图标3.2.2上下文菜单上下文菜单(ContextMenu)继承自Menu。上下文菜单不同与选项菜单,选项菜单服务于Activity,而上下文菜单是注册到某个View对象上的。如果一个View对象注册了上下文菜单,用户可以通过长按(约2秒)该View对象上以呼出上下文菜单。上下文菜单不支持快捷键(shortcut),其菜单选项也不能附带图标,但是可以为上下文菜单的标题指定图标。3.3.2上下文菜单 表3-21 Activity类中与ContextMenu相关的方法及说明方法名称参数说明方法说明onCreateCont

31、extMenu(ContextMenu menu,View v, ContextMenu. ContextMenuInfo menuInfo)menu:创建的上下文菜单v:上下文菜单依附的View对象;menuInfo:上下文菜单需要额外显示的信息每次为View对象呼出上下文菜单时都将调用该方法onContextItemSelected(MenuItem item)item:被选中的上下文菜单选项当用户选择了上下文菜单选项后调用该方法进行处理onContextMenuClosed(Menu menu)menu:被关闭的上下文菜单当上下文菜单被关闭时调用该方法registerForContext

32、Menu(View view)View:要显示上下文菜单的view对象为指定的View对象注册一个上下文菜单3.4.1 对话框简介对话框是Activity运行时显示的小窗口,当显示对话框时,当前Activity失去焦点而由对话框负责所有的人机交互。一般来说,对话框用于提示消息或弹出一个与程序主进程直接相关的小程序。在Android平台下主要支持以下几种对话框。1、提示对话框AlertDialog AlertDialog对话框可以包含若干按钮(04个不等)和一些可选的单选按钮和复选框。一般来说,AlertDialog的功能能够满足常见的对话框用户界面的需求。2、进度对话框ProgressDialog ProgressDialog可以显示进度轮(wheel)和进度条(bar),由于ProgressDialog继

温馨提示

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

评论

0/150

提交评论