1、Android应用程序设计应用程序设计张思民编著张思民编著第第4章章 多个用户界面的多个用户界面的程序设计程序设计 Android应用程序设计应用程序设计张思民编著张思民编著主要内容主要内容4.1 4.1 页面切换与传递参数值页面切换与传递参数值4.2 4.2 菜单菜单MenuMenu4.3 4.3 对话框对话框Android应用程序设计应用程序设计张思民编著张思民编著4.1页面切换与传递参数值页面切换与传递参数值Android应用程序设计应用程序设计张思民编著张思民编著4.1.1传递参数组件传递参数组件IntentIntentIntent是是androidandroid系统一种运行时的绑定机
2、制,系统一种运行时的绑定机制,在应用程序运行时连接两个不同组件。在在应用程序运行时连接两个不同组件。在android android 的应用程序中不管是页面切换,还是的应用程序中不管是页面切换,还是传递数据,或是调用外部程序,都可能要用到传递数据,或是调用外部程序,都可能要用到IntentIntent。IntentIntent负责对应用中某次操作的动作、负责对应用中某次操作的动作、动作涉及数据、附加数据进行描述,动作涉及数据、附加数据进行描述,AndroidAndroid则根据此则根据此IntentIntent的描述,负责找到对应的组件,的描述,负责找到对应的组件,将将 IntentInten
3、t传递给调用的组件,并完成组件的传递给调用的组件,并完成组件的调用。调用。Android应用程序设计应用程序设计张思民编著张思民编著4.1.2Activity页面切换页面切换 ActivityActivity跳转与传递参数值主要通过跳转与传递参数值主要通过IntentIntent类协类协助实现。在一个助实现。在一个ActivityActivity页面中启动另一个页面中启动另一个ActivityActivity页面的运行,是最简单的页面的运行,是最简单的ActivityActivity页页面切换方式。其步骤如下:面切换方式。其步骤如下:(1 1)首先创建一个)首先创建一个IntentIntent
4、对象,其构造方法为:对象,其构造方法为:Intent intent = new Intent(Intent intent = new Intent(当前当前Activity.this, Activity.this, 另一另一Activity.class);Activity.class);(2 2)然后调用)然后调用ActivityActivity的的startActivity(intent)startActivity(intent)方法,切换到另一个方法,切换到另一个ActivityActivity页面。页面。Android应用程序设计应用程序设计张思民编著张思民编著【例【例4-1】从一个】从
5、一个Activity页面启动另一个页面启动另一个Activity页页面示例。面示例。在本项目中,要建立两个页面文件及两个控制在本项目中,要建立两个页面文件及两个控制文件文件: :第一个页面的界面布局文件为activity_main.xml,控制文件为MainActivity.java;第二个页面的界面布局文件为second.xml,控制文件为secondActivity.java。还要修改配置文件还要修改配置文件AndroidManifest.xmlAndroidManifest.xml。 (代码见教材)(代码见教材)Android应用程序设计应用程序设计张思民编著张思民编著4.1.3应用应用
6、Intent在在Activity页面之间传递数据页面之间传递数据 1 1、BundleBundle类类BundleBundle类是一个用于将字符串与某组件对象建类是一个用于将字符串与某组件对象建立映射关系的组件。立映射关系的组件。BundleBundle组件与组件与IntentIntent配合配合使用,可在不同的使用,可在不同的ActivityActivity之间传递数据。之间传递数据。BundleBundle类的常用方法如下:类的常用方法如下:putString(String key, String value): putString(String key, String value): 把
7、把字符串用字符串用“键值键值”形式存放到形式存放到BundleBundle对象中;对象中; remove(String key):移除指定key的值; getString(String key):获取指定key的字符。Android应用程序设计应用程序设计张思民编著张思民编著2、应用、应用Intent在不同的在不同的Activity之间传递数据之间传递数据(1 1)在页面)在页面Activity AActivity A端端创建Intent对象和Bundle对象Intent intent = new Intent();Bundle bundle = new Bundle();为Intent指定切
8、换页面,用Bundle 存放键值对数据intent.setClass(MainActivity.this, secondActivity.class);bundle.putString(text, txt.getText().toString();将Bundle对象传递给Intentintent.putExtras(bundle);Android应用程序设计应用程序设计张思民编著张思民编著(2 2)在另一页面)在另一页面Activity BActivity B端端从Intent中获取Bundle对象bunde = this.getIntent().getExtras();从Bundle对象中按
9、键值对的键名获取对应数据值String str = bunde.getString(text);Android应用程序设计应用程序设计张思民编著张思民编著图4.3应用Intent在Activity页面之间传递数据Android应用程序设计应用程序设计张思民编著张思民编著【例【例4-2】从第一个】从第一个Activity页面传递数据到第二个页面传递数据到第二个Activity页面示例。页面示例。 (代码见教材)(代码见教材)Android应用程序设计应用程序设计张思民编著张思民编著4.2 菜单菜单MenuAndroid应用程序设计应用程序设计张思民编著张思民编著一个菜单(一个菜单(MenuMen
10、u)由多个菜单选项组成,)由多个菜单选项组成,选择一个菜单项就可以引发一个动作事选择一个菜单项就可以引发一个动作事件。件。在在AndroidAndroid系统中,菜单可以分为三类:系统中,菜单可以分为三类:选项菜单选项菜单(Option Menu),(Option Menu),上下文菜单上下文菜单(Context Menu)(Context Menu)以及子菜单以及子菜单(Sub Menu)(Sub Menu)。 Android应用程序设计应用程序设计张思民编著张思民编著4.2.1 选项菜单选项菜单(Option Menu)选项菜单需要通过按下设备的选项菜单需要通过按下设备的MenuMenu键
11、来键来显示。当按下设备上的显示。当按下设备上的MenuMenu键后,在屏键后,在屏幕底部弹出一个菜单,这个菜单称作选幕底部弹出一个菜单,这个菜单称作选项菜单(项菜单(OptionsMenuOptionsMenu)。)。Android应用程序设计应用程序设计张思民编著张思民编著1、Activity中创建菜单的方法中创建菜单的方法方 法说 明onCreateOptionMenu(Menu menu)用于初始化菜单,menu为Menu对象实例。onPrepareOptionsMenu(Menu menu)改变菜单状态,在菜单显示前调用。onOptionsMenuClosed(Menu menu)菜单
12、被关闭时调用。onOptionsItemSelected(MenuItem item)菜单项被点击时调用,即菜单项的监听方法。 Activity实现选项菜单的回调方法实现选项菜单的回调方法Android应用程序设计应用程序设计张思民编著张思民编著2、菜单、菜单Menu 设计选项菜单需要用到Menu、MenuItem接口。一个Menu对象代表一个菜单,Menu对象中可以添加菜单项MenuItem对象,也可以添加子菜单SubMenu。菜单Menu使用add(int groupId, int itemId, int order, CharSequence title) 方法添加一个菜单项。add()
13、方法中的四个参数,依次是: (1)组别;)组别; (2)Id,这个很重要,这个很重要,Android根据这个根据这个Id来确定不同的菜单;来确定不同的菜单; (3)顺序,哪个菜单项在前面由这个参数的大小决定;)顺序,哪个菜单项在前面由这个参数的大小决定; (4)文本,菜单项的显示文本。)文本,菜单项的显示文本。Android应用程序设计应用程序设计张思民编著张思民编著3、创建选项菜单的步骤、创建选项菜单的步骤创建选项菜单的步骤如下:创建选项菜单的步骤如下:(1 1)重写)重写ActivityActivity的的onCreateOptionMenu(Menu onCreateOptionMenu
14、(Menu menu)menu)方法,当菜单第一次被打开时调用;方法,当菜单第一次被打开时调用;(2 2)调用)调用MenuMenu的的add( )add( )方法添加菜单项方法添加菜单项(MenuItem)(MenuItem);(3 3),重写),重写ActivityActivity的的onOptionsItemSelected(MenuItem item)onOptionsItemSelected(MenuItem item)方法,方法,当菜单项当菜单项(MenuItem)(MenuItem)被选择时来响应事件。被选择时来响应事件。Android应用程序设计应用程序设计张思民编著张思民编著
15、【例【例4-3】选项菜单应用示例。】选项菜单应用示例。(代码见教材)(代码见教材)Android应用程序设计应用程序设计张思民编著张思民编著4.2.2 上下文菜单上下文菜单(Context Menu)AndroidAndroid系统系统 的上下文菜单类似于的上下文菜单类似于 PC PC 上的右上的右键菜单。当为一个视图注册了上下文菜单之后,键菜单。当为一个视图注册了上下文菜单之后,长按(长按(2 2 秒左右)这个视图对象就会弹出一个秒左右)这个视图对象就会弹出一个浮动菜单,即上下文菜单。浮动菜单,即上下文菜单。 Android应用程序设计应用程序设计张思民编著张思民编著创建一个上下文菜单的步骤
16、如下:创建一个上下文菜单的步骤如下:1. 1. 重写重写Activity Activity 的的 onCreateContenxtMenu() onCreateContenxtMenu() 方法,调用方法,调用 Menu Menu 的的 add add 方法添加菜单项方法添加菜单项(MenuItemMenuItem)。)。2. 2. 重写重写 Activity Activity 的的 onContextItemSelected() onContextItemSelected() 方法,响应上下文菜单菜单项的单击事件。方法,响应上下文菜单菜单项的单击事件。3. 3. 调用调用Activity A
17、ctivity 的的 registerForContextMenu() registerForContextMenu() 方法,为视图注册上下文菜单。方法,为视图注册上下文菜单。Android应用程序设计应用程序设计张思民编著张思民编著【例【例4-4】上下文菜单应用示例。】上下文菜单应用示例。(代码见教材)(代码见教材)Android应用程序设计应用程序设计张思民编著张思民编著4.3 对话框对话框Android应用程序设计应用程序设计张思民编著张思民编著对话框是一个有边框、有标题栏的独立存对话框是一个有边框、有标题栏的独立存在的容器,在应用程序中经常使用对话在的容器,在应用程序中经常使用对话框
18、组件来进行人机交互。框组件来进行人机交互。AndroidAndroid系统提系统提供了四种常用对话框:供了四种常用对话框: AlertDialog:消息对话框; ProgressDialog:进度条对话框; DatePickerDialog:日期选择对话框; TimePickerDialog:时间选择对话框。 Android应用程序设计应用程序设计张思民编著张思民编著4.3.1消息对话框消息对话框AlertDialog方 法说 明AlertDialog.Builder(Context)对话框Builder对象的构造方法create();创建AlertDialog对象setTitle(); 设置
19、对话框标题setIcon();设置对话框图标setMessage();设置对话框的提示信息setItems();设置对话框要显示的一个list setPositiveButton();在对话框中添加yes按钮setNegativeButton();在对话框中添加no按钮show();显示对话框dismiss();关闭对话框Android应用程序设计应用程序设计张思民编著张思民编著设计AlertDialog对话框的步骤如下:(1)用AlertDialog.Builder类创建对话框Builder对象Builder dialog=new AlertDialog.Builder(Context);(
20、2)设置对话框的标题、图标、提示信息内容、按钮等 dialog.setTitle(普通对话框); dialog.setIcon(R.drawable.icon1); dialog.setMessage(一个简单的提示对话框); dialog.setPositiveButton(确定, new okClick() ;Android应用程序设计应用程序设计张思民编著张思民编著(3)创建并显示AlertDialog对话框对象 dialog.create(); dialog.show();如果在对话框内部设置了按钮,还需要对其设置事件监听OnClickListener。Android应用程序设计应用程
21、序设计张思民编著张思民编著【例【例4-5】消息对话框应用示例。】消息对话框应用示例。在本例中设计了两种形式的对话框程序,一个是发出提示信息的普通对话框,另一个是用户登录对话框。 在用户登录对话框中,设计了用户登录的布局文件long.xml,供用户输入相关验证信息。 (代码见教材)(代码见教材)Android应用程序设计应用程序设计张思民编著张思民编著4.3.1几种其他常用对话框几种其他常用对话框1 1、进度条对话框、进度条对话框ProgressDialogProgressDialog2 2、日期选择对话框和时间选择对话框、日期选择对话框和时间选择对话框Android应用程序设计应用程序设计张思
22、民编著张思民编著1、进度条对话框、进度条对话框ProgressDialog方 法说 明getMax()获取对话框进度的最大值getProgress()获取对话框当前进度值onStart()开始调用对话框setMax(int max)设置对话框进度的最大值setMessage(CharSequence message) 设置对话框的文本内容setProgress(int value)设置对话框当前进度show(Context context, CharSequence title, CharSequence message)设置对话框的显示内容和方式ProgressDialog(Context
23、context)对话框的构造方法Android应用程序设计应用程序设计张思民编著张思民编著2、日期选择对话框和时间选择对话框、日期选择对话框和时间选择对话框方 法说 明updateDate(int year, int monthOfYear, int dayOfMonth)设置DatePickerDialog对象的当前日期onDateChanged(DatePicker view, int year, int month, int day)修改DatePickerDialog对象的日期updateTime(int hourOfDay, int minutOfHour)设置TimePickerD
24、ialog对象的时间onTimeChanged(TimePicker view, int hourOfDay, int minute)修改TimePickerDialog对象的时间Android应用程序设计应用程序设计张思民编著张思民编著【例【例4-6】进度及日期、时间对话框示例。】进度及日期、时间对话框示例。(代码见教材)(代码见教材)Android应用程序设计应用程序设计张思民编著张思民编著习题四习题四1 1、设计一个具有两个页面的程序,第一、设计一个具有两个页面的程序,第一个页面显示一张封面的图片,第二个页个页面显示一张封面的图片,第二个页面显示面显示“欢迎进入本系统欢迎进入本系统”, ,这两个页面这两个页面之间能相互切换。之间能相互切换。2 2、设计一个具有、设计一个具有3 3个选项的菜单程序,个选项的菜单程序,当单击每个选项时,分别跳转到当单击每个选项时,分别跳转到3 3个不同个不同的页面。的页面。3 3、设计一个具有计算器功能的对话框程、设计一个具有计算器功能的对话框程序。序。