1、Android基础与应用开发教程大连理工大学出版社Android菜单和对话框第7章7.1 Android菜单7.1 Android菜单7.1 Android菜单在Android SDK中,创建菜单对象不必从零开始。因为一个活动只与一个菜单相关联,因此Android创建这个菜单并将它传递给onCreateOptionsMenu()回调方法。这个方法让菜单和菜单项联系在一起,见下述代码:7.1.1 文本框组件TextView7.1 Android菜单 1.Activity类的回调方法onOptionsItemSelected()单击菜单项时Android调用Activity类的回调方法onOpti
2、onsItemSelected(),其代码如下:7.1.2 菜单项的响应7.1 Android菜单2.通过监听器响应菜单项为了得到较好的性能,通常重载onOptionsItemSelected)方法来响应菜单。7.1.2 菜单项的响应7.1 Android菜单3.使用Intent响应菜单项利用MenuItem类的setIntent(intent)方法可将菜单项与意图关联起来(菜单项默认不与意图关联)。但关联后,别的东西就不再处理菜单项了,而是默认地利用startActivity(intent)去调用意图。为了能顺利工作,所有处理程序,尤其是onOptionsItemSelected()方法,应
3、当调用其父类的onOptionsItemSelected)方法去处理不被处理的项。也就是说,系统给onOptionsItemSelected()一次机会首先去处理菜单项。(当然,接着就轮到监听器了)。如果不重载onOptionsItemSelected)方法,则Android架构的基类就会对菜单项做激活意图所需的事情;如果重载了这个方法且又不想用这个菜单项,就必须调用父方法,它会方便意图的调用。因此我们的做法是:要么不重载onOptionsItemSelected方法,要么重载它并激活不想处理的菜单项的父方法。7.1.2 菜单项的响应7.1 Android菜单7.1.3 创建菜单的测试工具7.
4、1 Android菜单 实现这个测试工具的步骤共分7步:创建XML布局文件;创建该布局文件的活动类;建立菜单;添加菜单项;添加二级菜单项;添加菜单项的响应;修改AndroidManifest.xml文件。7.1.3 创建菜单的测试工具7.2 其他菜单类型注意,当应用程序具有超过屏幕所能显示的更多菜单项时,在屏幕的右下角就会自动出现一个More菜单项,它就是所谓的扩展型(expanded)菜单。扩展型菜单有局限性,它不能使用图标。用户只要单击More菜单项就能看到这些无图标的菜单。7.2.1 扩展型菜单Android不仅支持文本,也支持图像或图标菜单,即用图代替文本的菜单。但使用图标菜单需注意几
5、个限制:不能用图标菜单表示扩展型菜单;图标菜单项不支持选中标志;如果图标菜单项中的文本过长,文本会被截短(也适用于文本菜单项),这取决于显示尺度。7.2.2 图标菜单7.2 其他菜单类型一个菜单对象可包含多个子菜单(SubMenu)对象。每个子菜单对象都可调用Menu.addSubMenu()方法添加到菜单对象内(见代码7-9)。向子菜单中添加菜单项与向菜单中添加菜单项相同,因为子菜单是从菜单对象派生出来的。但是,不能再向子菜单中添加另外的子菜单。图7-1给出了菜单与子菜单之间的结构关系。7.2.3 子菜单大多数Windows应用程序都带有诸如File,Edit,View,Open,Close
6、和Exit等菜单。这些菜单称为系统菜单。Android SDK创建选项菜单时,系统也可插人类似的一套菜单。但是Android SDK 2.0版并不能添加这些菜单,程序员可以通过代码添加系统菜单。调用基类(Activity)的onCreateOptionsMenu()方法可将系统菜单添加到由常数CATEGORY_ SYSTEM标识的组内。7.2.4 系统菜单7.2 其他菜单类型 桌面程序广泛使用上下文菜单,譬如在Windows中右击某个UI元素就可以访问上下文菜单。Android通过所谓长单击的活动支持上下文菜单。长单击是鼠标在Andriod视图上按下的时间稍长。在手机类的设备上鼠标单击可用多种
7、办法实现,这取决于导航机制:在手机上下述几种情况都相当于鼠标单击:按手机上的转轮、轻击或轻按手机触摸板,或手机按移动箭头按钮并单击箭头组中间的按钮等。总之,不论设备上鼠标单击如何实现,鼠标单击持续较长时间都是长单击。7.2.5 上下文菜单7.2 其他菜单类型7.2.5 上下文菜单7.2 其他菜单类型7.2.6 替换菜单Android引人了一个新的菜单概念,即替换(alternative)菜单,它可把替换菜单项用作选项菜单、子菜单和上下文菜单的一部分。其特点是多个Android应用程序可相互使用它,即某应用程序包含另一应用程序的菜单,所以它是Android应用程序间通信或实用架构的一部分。选中选
8、择菜单时,目标应用程序或活动就会用所需的数据URL启动,并使用被传送意图中的数据URL。现在需要使用第4章中有关内容提供者、内容URI、内容MIME类型和意图等概念。7.2 其他菜单类型7.2.7 菜单对数据变化的响应到目前为止,我们涉及的只是静态菜单,它们不会随屏幕变化动态地改变。创建动态菜单必须使用Android提供的onPrepareOptionsMenu)方法6,它为待显示在屏幕上的标准选项菜单做准备。菜单每次显示时,它在该菜单显示之前被调用。使用此方法能有效地启用/禁用项目,或动态修改其内容。默认的实现能根据活动的状态更新系统菜单项目。派生类应该始终用基类的实现调用。设计菜单功能时应
9、牢记这些。其参数为上次显示或onCreateOptionsMenu()首次初始化的选项菜单。若返回true则显示要显示的菜单,返回false将不会显示菜单。7.3 通过XML文件加载菜单7.3.1 XML菜单资源文件的结构定义菜单的XML文件的代码示于代码7-14中。其中用同等级的menu标记开始,后面跟着一系列标记定义菜单项组,以及一系列定义菜单项。每个组合菜单项都分别用自己的+记指定其记。此外,每个记后面都关联一个符号名字。如menuGroup_main和menu_ testPick等。7.3 通过XML文件加载菜单7.3.2 XML菜单资源文件的展开假定代码7-14的XML文件名为my_
10、menu.xml,并存人/res/menu子目录内。这将会自动生成一个资源引用id,即R,menu.my_menuo Android提供了一个android.view.MenuInflater类,它可借助这个菜单资源引用id,用XML文件中的菜单定义来填写Menu对象。具体的实现代码如下:7.3 通过XML文件加载菜单7.3.3 对XML菜单项的响应响应XML菜单项的方式与编程创建菜单的响应方式相同,但也有微小的差别。像以前一样,将在onOptionsItemSelected回调方法中处理菜单项的响应。但此时可从Android资源获得某些帮助(见4.1.3节)。如7.3.1节所述,Androi
11、d同时自动生成XML文件的资源ID和菜单项ID来区别各菜单项。这有利于菜单项的响应,因为不需要在XML菜单文件内给这些ID定义常数和考虑其唯一性,因为资源ID生成过程已考虑到这些。7.3 通过XML文件加载菜单7.3.4 附加的XML菜单标记在构造XML文件时,必须知道可能使用的各种XML标记。查看Android SDK中的API演示(demos)就能很快获得这些信息。这些Android API演示包含了一系列菜单来帮助查看Android的各种编程问题。看一下/res/menu子目录也可发现许多XML菜单的例子。在此简述一些重要的标记。7.3 通过XML文件加载菜单7.3.4 附加的XML菜单
12、标记7.4 Android对话框7.4.1 警告对话框警告对话框(Alert)通常包含确认表单或调试的简单消息。考虑下面HTML页面中常见的调试示例:Android未直接提供创建警告对话框的函数,我们只能用警告对话框构建器android.app.AlertDialog.Builde:类来构建和处理警告对话框。该构建器类构建的对话框可执行的任务是:读取消息并用Yes或No进行响应;从其列表中挑选一个或多个项目;观察应用程序进展情况;从一组选项中选取一个选项;继续运行程序之前提示用户进行响应。7.4 Android对话框7.4.1 警告对话框构建这些对话框和用菜单项激活该对话框需遵循的步骤为:构建
13、Builder对象;设置其显示参数,譬如按钮数量、项目列表等;设置这些按钮的回调方法;启动Builder具体构建对话框,其类型取决于Builder对象的设置;利用Dialog.show()显示对话框。7.4 Android对话框7.4.2 提示对话框创建提示对话框所要遵循的步骤是:为提示对话框提供一个布局视图;将该布局加载到视图类内;构建一个Builder对象;在Builder对象内设置该视图;设置按钮和它们的回调来捕捉输人的文本;用警告对话框builder来创建该对话框;显示该对话框。7.5 进度条对话框进度条对话框(ProgressDialog)是AlertDialog类的扩展,它可用两种
14、形式显示任务的进度:用纺车形式显示进度(对于进度不确定的任务,见图7-6)和用进度条显示进度(而对于进度确定的任务,见图7-7)。进度条对话框也可以提供按钮,譬如取消下载的按钮等。7.5 进度条对话框7.5.1 显示进度条显示进度条动画的操作步骤为:用ProgressDialog类的构造函数ProgressDialog(Context)进行初始化;用setProgressStyle(int)设置进度样式为STYLEHORIZONTAL,并设置其他属性,如消息;调用show)或用onCreateDialog(int)回调来返回ProgressDialog,为显示对话做好准备;用迄今完成的总百分量
15、调用setProgress(int)或用该总百分量与增量值之和调用incrementProgressBy(int)都可增加显示的进度量。7.6 托管对话框托管对话框(managed dialog)是在其生命周期内由活动管理的对话框。前面诸例子中所创建的对话框,其生命周期都是由对话框自己管理的。自己管理的优点是代码比较简单明了,需要时就创建,完成后就自动销毁;缺点是每次调用都需要创建对话框对象,内存开销比较大。而托管对话框只创建一次就能多次使用,所以其核心概念是复用(Multiplex),它是一种资源池概念。7.7 本章小结我们对于Android的菜单和对话框做了较全面的介绍,它们是UI编程中的重要组件。通过这些介绍,我们可了解Android中各种菜单的使用方法,包括子菜单、图标菜单、上下文菜单和替换菜单。同时阐述了用XML菜单资源来提高菜单的效率的问题。我们还建立了菜单的测试工具,它不仅可用于测试菜单,而且可用于其他程序的测试。菜单提供了激活和测试新功能的简单手段。本章也阐述了Android对话框所具有的特殊挑战性。其中包括异步对话框和模态对话框的意义,并介绍了托管对话框的意义和用法。感谢观看
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。