您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > Android 开发指南-用户界面-对话框
创建对话框CreatingDialogs对话框通常是一个显示在当前活动前面的小窗口。下面的活动失去焦点而由对话框接受所有的用户交互。对话框通常被用来当做通知或者运行中的应用程序相关的短暂活动。AndroidAPI支持下面的对话框对象类型:警告对话框AlertDialog这个对话框管理0,1,2,或3个按钮,和/或一个可包含复选框和单选按钮的可选项列表。这个警告对话框能够组建大多数用户界面而且是推荐使用的对话框类型。请查看下面的创建一个警告对话框CreatinganAlertDialog。进度对话框ProgressDialog用来显示一个进度轮或进度条。因此它是警告对话框的扩展,它也支持按钮。请查看下面的CreatingaProgressDialog。日期选择对话框DatePickerDialog一个允许用户选择日期的对话框。请查看HelloDatePicker指南。时间选择对话框TimePickerDialog一个允许用户选择时间的对话框。请查看HelloTimePicker指南.如果你想定制你自己的对话框,你可以在基础对话框对象或任何上面列举的子类对话框上进行扩展并定义一个新的布局。请查看下面的创建自定义对话框CreatingaCustomDialog章节。显示对话框ShowingaDialog对话框经常作为活动Activity的一部分来创建和显示。你通常应该从活动的onCreateDialog(int)回调方法里创建对话框。当你使用这个回调函数时,Android系统会有效的设置这个活动为每个对话框的所有者,从而自动管理每个对话框的状态并挂靠到活动上。这样,每个对话框继承这个活动的特定属性。比如,当一个对话框打开时,菜单键显示为这个活动定义的选项菜单,音量键修改活动使用的音频流。注意:如果你决定在onCreateDialog()方法之外创建一个对话框,它将不会被附着到活动上。不过,你可以通过setOwnerActivity(Activity)把它附着到一个活动上。当你想要显示一个对话框时,调用showDialog(int)方法并传递一个唯一标识这个对话框的整数。当对话框第一次被请求时,Android从你的活动中调用onCreateDialog(int),你应该在这里初始化这个对话框Dialog。这个回调方法被传以和showDialog(int)相同的ID。当你创建这个对话框后,在方法的最后返回这个对象。在对话框被显示之前,Android还调用了可选的回调函数onPrepareDialog(int,Dialog).如果你想在每一次对话框被打开时改变它的任何属性,你可以定义这个方法。这个方法在每次打开对话框时被调用,而onCreateDialog(int)仅在对话框第一次打开时被调用。如果你不定义onPrepareDialog(),那么这个对话框将保持和上次打开时一样。这个方法也被传递以对话框的ID,和在onCreateDialog()中创建的对话框对象。定义onCreateDialog(int)和onPrepareDialog(int,Dialog)回调函数的最佳方法是使用一个switch语句来检查传递进来的id参数。每个case应该检查一个唯一的对话框ID然后创建和定义相应的对话框。比如,想象一下一个游戏使用两个不同的对话框:一个用来指示这个游戏已经暂停而另一个来指示游戏结束。首先,为每个对话框定义一个整数:staticfinalintDIALOG_PAUSED_ID=0;staticfinalintDIALOG_GAMEOVER_ID=1;然后,为每一个ID用一个switchcase定义这个onCreateDialog(int)回调函数:protectedDialogonCreateDialog(intid){Dialogdialog;switch(id){caseDIALOG_PAUSED_ID://dotheworktodefinethepauseDialogbreak;caseDIALOG_GAMEOVER_ID://dotheworktodefinethegameoverDialogbreak;default:dialog=null;}returndialog;}注意:在这个例子里,case语句没有具体内容,因为这超出了本章讨论范围。当是时候显示其中之一的对话框时,使用对话框ID调用showDialog(int):showDialog(DIALOG_PAUSED_ID);消除对话框DismissingaDialog当你准备关闭对话框时,你可以通过对这个对话框调用dismiss()来消除它。如果需要,你还可以从这个活动中调用dismissDialog(int)方法,这实际上将为你对这个对话框调用dismiss()方法.如果你想使用onCreateDialog(int)方法来管理你对话框的状态(就如同在前面的章节讨论的那样),然后每次你的对话框消除的时候,这个对话框对象的状态将由该活动保留。如果你决定不再需要这个对象或者清除该状态是重要的,那么你应该调用removeDialog(int)。这将删除任何内部对象引用而且如果这个对话框正在显示,它将被消除。使用消除侦听器Usingdismisslisteners如果你希望你的应用程序在一个对话框消亡的时候执行一些流程,那么你应该附着一个on-dismiss侦听器到对话框上。首先定义DialogInterface.OnDismissListener接口。这个接口只有一个方法,onDismiss(DialogInterface),将在对话框消亡的时候被调用。然后简单的传递你的OnDismissListener实现给setOnDismissListener()。然而,请注意对话框也可以被“取消”。这是一个表明对话框被用户显示取消的特殊情况。这将在用户按“返回”按钮时发生,或者这个对话框显示的调用cancel()(也许通过对话框上的一个“取消”按钮)。当一个对话框被取消时,这个OnDismissListener依然会被通知到,但是如果你希望在对话框被显示取消时被通知到(而不是通常的消除方式),那么你应该通过setOnCancelListener()注册一个DialogInterface.OnCancelListener。创建警告对话框CreatinganAlertDialog一个警告对话框是对话框的扩展类。它能够构建大多数对话框用户界面并且是推荐使用的对话框类型。你应该在具备如下特性的时候使用它:·一个标题·一个文本消息·1个,2个或3个按钮·一个可选项列表(可选的复选框或单选按钮)为了创建一个警告对话框,使用AlertDialog.Builder子类。通过AlertDialog.Builder(Context)获取一个构造器然后使用这个类的公共方法来定义警告对话框的所有属性。当得到构造器后,通过create().方法来获取警告对话框对象。下面的题目说明了如何使用AlertDialog.Builder类来定义不同的警告对话框属性。如果你在onCreateDialog()回调函数中使用下面的代码,你可以返回结果对话框对象来显示它。增加按钮Addingbuttons为了创建一个如右图所示的包含并行按钮的警告对话框,使用set...Button()方法:AlertDialog.Builderbuilder=newAlertDialog.Builder(this);builder.setMessage(Areyousureyouwanttoexit?).setCancelable(false).setPositiveButton(Yes,newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intid){MyActivity.this.finish();}}).setNegativeButton(No,newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intid){dialog.cancel();}});AlertDialogalert=builder.create();首先,为这个对话框添加一个消息setMessage(CharSequence)。然后,开始函数链并设置该对话框为不能取消notcancelable(因此用户不能使用返回按钮关闭这个对话框)。对每个按钮,使用任一set...Button()方法,比如setPositiveButton(),该方法接受按钮名称以及一个定义用户选中按钮后所采取动作的DialogInterface.OnClickListener。注意:你仅可以为这个警告对话框添加其中一种按钮类型。也就是,你不能包含多个“确定”按钮。这限制了可能的按钮数目只能是3个:确定,中立和否定。这些名字和你按钮的实际功能是技术上无关的,但是应该可以帮助你记录做了什么。增加一个列表Addingalist为了创建一个带有可选项列表的警告对话框,如右边所示,可使用setItems()方法:finalCharSequence[]items={Red,Green,Blue};AlertDialog.Builderbuilder=newAlertDialog.Builder(this);builder.setTitle(Pickacolor);builder.setItems(items,newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intitem){Toast.makeText(getApplicationContext(),items[item],Toast.LENGTH_SHORT).show();}});AlertDialogalert=builder.create();首先,用setTitle(CharSequence)方法给对话框添加一个标题。然后,添加用setItems()添加一个可选项列表,该列表接受一组显示的items和一个DialogInterface.OnClickListener来定义用户选中按钮后所采取动作。增加复选框和单选按钮要在对话框里创建一个多选项列表(checkboxes)或者单选项(radiobuttons),可分别调用setMultiChoiceItems()和setSingleChoiceItems()方法。如果你在onCreateDialog()回调函数中创建这些可选列表,Android会帮你管理列表状态。只要这个活动是激活的,对话框会记住之前选中的items,但如果用户退出这个活动,用户选择将丢失。注意:为了在用户离开或暂停这个活动的时候能够保存选择,你必须通过活动生命期ActivityLifecycle来恰当的保存和恢复设置。为了永久保存选项,即使活动进程被完全终止,你需要使用数据存储DataStorage技术。要创建如右边所示的一个包含单选项列表的警告对话框,使用前面例子中相同的代码,不过需要把setItems()方法替换为setSingleChoiceItems()。finalCharSequence[]items={Red,Green,Blue};AlertDialog.Builderbuilder=newAlertDialog.Builder(this);builder.setTitle(Pickacolor);builder.setSingleChoiceItems(items,-1,newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intitem){Toast.makeText(getApplicatio
本文标题:Android 开发指南-用户界面-对话框
链接地址:https://www.777doc.com/doc-3378254 .html