Android菜单和对话框

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

主讲:XXX第4章菜单和对话框菜单是用户界面中最常见的元素之一,使用非常频繁,在手机应用程序中,由于受到手机屏幕大小的制约,菜单在手机应用中的使用减少很多,但是依然有手机应用程序会添加菜单。当图形用户界面在前台运行时,如果用户按下手机上的Menu键,就会在屏幕底端弹出相应的选项菜单,但其对应的功能是需要程序开发者编程实现的。如果在应用程序开发中没有实现其功能,则在程序运行时按下手机上的Menu键是不会有作用的。在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)。本章主要内容4.1选项菜单和子菜单4.2上下文菜单4.3Android中对话框4.4提示信息4.1选项菜单和子菜单一个Menu对象代表一个菜单,可以添加菜单项MenuItem,也可以添加子菜单SubMenu。Android中的菜单是显示在Activity之上的元素,分为OptionsMenu、ContextMenu、SubMenu等多种类型。通常通过回调方法来创建菜单并处理菜单按下的事件。其中,SubMenu代表一个普通菜单,可以包含一到多个菜单项。ContextMenu代表一个子菜单,由一到多个菜单项组成。Menu类中定义了若干个add()和addSubMenu()方法,其中,add()用于添加菜单项,addSubMenu()用于添加子菜单,这些重载方法的区别在于是否将子菜单、菜单项添加到指定菜单中、是否使用资源文件中的字符串资源来设置标题等。SubMenu继承了Menu,它代表了一个子菜单,除了Menu的方法外还有设置菜单头图标的方法SetHeaderIcon(Drawableicon)、设置菜单头标题的方法SetHeaderTitle(inttitleRes)和使用View来设置菜单头的方法SetHeaderView(Viewview)等设置属性的方法。在应用程序中要添加菜单或者子菜单的步骤如下。(1)需要重写Activity的onCreateOptionsMenu(Menumenu)方法,在该方法中创建菜单,添加其菜单项或者子菜单。(2)对其触发的事件进行监听。如果希望应用程序能够响应菜单项的单击事件重写Activity的onOptionsItemSelected(MenuItemmi),这样才能够实现根据不同的菜单选项执行不同操作,还可以用户自定义菜单项的监听器。4.1.1创建OptionsMenu菜单实例选项菜单OptionsMenu默认样式是在屏幕底部弹出一个菜单,其实现方式有两种:第一种是通过Menu类在创建菜单;第二种是通过XML文件布局文件添加菜单的样式。下面通过实例展示如何使用两种方式创建选项菜单。案例:使用OptionsMenu设计一个界面,效果如图4-1所示。当选择了某个选项时,显示一个提示信息。方法一:通过Menu类来创建菜单。重载onCreateOptionsMenu(Menumenu)方法,并在此方法中通过Menu类的add()方法添加菜单项该方法的四个参数,依次是代表组别、Id、显示顺序和菜单的显示文本。方法二:通过XML布局实现菜单。通过Layout布局创建菜单对应的xml文件,然后在onCreateOptionsMenu中设置menu为定义的res/menu/menu.xml,其具体实现步骤见书。4.1.2监听菜单事件除了重写onOptionsItemSelected(MenuItemitem)方法处理菜单的单击事件外,可以通过菜单项的setOnMenuItemClickListener方法为不同的菜单项分别绑定监听器。采用这种方式无需为每个菜单项指定ID,而是通过获取所添加的MenuItem对象,然后给对象绑定监听者。以下给出“delete”菜单项的创建、事件注册与响应。由于篇幅有限,其他的实现与其相同。publicbooleanonCreateOptionsMenu(Menumenu){MenuItemdeleteItem=menu.add(Menu.NONE,Menu.FIRST+1,5,删除).setIcon(android.R.drawable.ic_menu_delete);deleteItem.setOnMenuItemClickListener(newOnMenuItemClickListener(){publicbooleanonMenuItemClick(MenuItemarg0){Toast.makeText(MenuDemo2.this,删除菜单被点击了,Toast.LENGTH_LONG).show();returnfalse;}});returntrue;}说明:(1)该方法实现效果与前一个完全相同,区别仅在于处理菜单事件的监听方式不同,一般来说,通过重载onOptionsItemSelected(MenuItemitem)方法处理菜单的单击事件更加简洁,因为所有的事件处理代码都控制在该方法内,通过绑定事件监听器使程序具有更清晰的逻辑性,但是代码显得有些臃肿。(2)如果是通过XML布局文件来实现的菜单,可以通过MenuItemdelete=(MenuItem)findViewById(R.id.delete)语句获取菜单项对象。(3)如果希望所创建的菜单项是单选菜单项或多选菜单项,则可以调用菜单项的setCheckable(Booleanchackable)来设置该菜单项是否可以被勾选。通过调用setGroupCheckable()设置组里的菜单是否可勾选。(4)可以通过菜单项的setShortcut()方法为其设置快捷键。4.1.3与菜单项关联的Activity的设置在应用程序中如果需要单击某个菜单项来启动其他Activity或者Service时,不需要开发者编写任何事件处理代码,只要调用MenuItem的setIntent(Intentintent)方法即可。该方法实现把菜单项与指定的Intent关联在一起,当用户单击该菜单项时,该Intent所代表的组件将会被启动。案例:通过菜单项启动另一个Activity,效果如图4-2所示。当选择了“StarttheotherActivity”时,启动另一个Activity。步骤见书中内容4.2上下文菜单Android用ContextMenu来代表上下文菜单,类似于桌面程序的右键弹出式菜单,在Android中不是通过用户右击鼠标而得到,而是通过长时间按住界面上的元素得到事先设计好的上下文菜单。开发上下文菜单的方法与选项菜单的方法基本相似,因为ContextMenu也是Menu的子类,所以可用相同的方法为它添加菜单项。其区别在于:开发上下文菜单不是重写onCreateOptionsMenu(Menumenu)方法,而是调用onCreateContextMenu(ContextMenumenu,Viewsource,ContextMenu.ContextMenuIfnomenuInfo)方法,该方法在每次启动上下文菜单时都会被调用一次,在该方法中可以通过使用add()方法添加相应的菜单项。开发上下文菜单的步骤如下。(1)重写onCreateContextMenu()方法。(2)调用Activity的registerForContextMenu(Viewview)为view组件注册上下文菜单。(3)重载onContextItemSelected(MenuItemmi)或者绑定事件监听器,对菜单项进行事件相应。案例:定义上下文菜单,让用户进行颜色选择,根据用户所选颜色的不同来更改文本框的背景颜色,效果如图4-3所示。(1)创建项目ContextMenu。(2)创建ContextMenuActivity,并在onCreate()方法中通过方法为文本框注册上下文菜单。(3)重载onCreateContextMenu()在该方法中创建含有“红色”、“绿色”、“蓝色”和“退出”四个菜单项的菜单。(4)重载onContextItemSelected()方法对事件进行注册。4.3Android中对话框Android中实现对话框可以自定义对话框,同时Android也提供了丰富的对话框支持,常用的对话框有下面4种。(1)AlertDialog:功能丰富、应用最广泛;(2)ProgressDialog:进度对话框,该对话框只对简单进度条封装;(3)DatePickerDialog:日期选择对话框,该对话框是对DatePicker的包装;(4)TimePickerDialog:时间选择对话框,是对TimePicker的包装,这四种对话框中功能最强、用法最灵活的就是AlertDialog,因此,它的应用最为广泛。•AlertDialog是一个提示窗口,要求用户做出选择,该对话框中一般会有几个选择按钮、标题信息和提示信息。AlertDialog提供了一些方法来生成四种预定义对话框。•(1)带消息、带N个按钮的提示对话框。•(2)带列表、带N个按钮的列表对话框。•(3)带多个单选列表项,带N个按钮的对话框。•(4)带多个多选列表项,带N个按钮的对话框。•AlertDialog的构造方法全部是Protected的,所以不能直接通过AlertDialog对象来创建对话框。要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法。使用AlertDialog.Builder创建对话框需要了解以下几个方法:(1)setTitle()为对话框设置标题;(2)setIcon()为对话框设置图标;(3)setMessage()为对话框设置内容;(4)setView()给对话框设置自定义样式;(5)setItems()设置对话框要显示的一个list,一般用于显示几个命令;(6)setMultiChoiceItems()来设置对话框显示一系列的复选框;(7)setNeutralButton()普通按钮;(8)setPositiveButton()对话框添加Yes按钮;(9)setNegativeButton()对话框添加No按钮;(10)create()创建对话框;(11)show()显示对话框。4.3.1提示对话框AlertDialog创建AlertDialog的主要步骤如下。(1)获得AlertDialog的静态内部类Builder对象,由该类创建对话框;(2)通过Builder对象设置对话框的标题、按钮及按钮将要响应的事件;(3)调用Builder对象的create()方法创建对话框;(4)调用AlertDialog的show()方法显示对话框。案例:创建不同类型的对话框,其运行效果如以下各图所示,•ProgressDialog类继承自AlertDialog类;同样存放在android.app包中。ProgressDialog有两种形式:一种是圆圈旋转形式;另一种是水平进度条形式,可以通过属性设置来修改其形式。开发者可以通过该类提供的一系列的set方法,设置对话框中进度条的风格、进度条的最大值等属性。•案例:在主界面上放置一个命令按钮,当单击命令按钮时,弹出一个进度对话框,提示后台程序正在执行,稍等片刻,其运行效果如图4-10所示。•步骤见书4.3.2进度对话框ProgressDialog•在Android应用中,DatePickerDialog与TimePickerDialog分别表示日期对话框和时间对话框,都是以弹出式对话框形式出现的,使用方法基本相同。前者需要实现OnDateSetListener接口中的onDateSet方法,后者需要实现OnTimeSetListener接口中的onTimeSet方法,操作步骤如下。•(1)创建DatePickerDialog或TimePickerDialog对象,通过它们的show()方法将其显示出来。•(2)为日期或时间对话框对象绑定监听者。•案例:在主界面上放置两个命令按钮“显示日期”和“显示时间”。当单击“显

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功