`
ruirui516888
  • 浏览: 136410 次
文章分类
社区版块
存档分类
最新评论

Android 里的对话框Dialog 实现机制基础

 
阅读更多

Android 里的对话框Dialog 实现机制基础

Dialogs
对话框通常都是出现在当前活动的前面,当当前活动弹出对话框后,
当前活动将失去焦点,而对话框将完成与用户交互的任务。对话框通常拿来当通知使用,临时中断用户
当前操作完成一个与当前活动直接相关的小工作,比如登录成功提示框及进度条。
Dialog 类是创建对话框的基类,然而,通常我们并不实例化一个Dialog,取而代之,我们使用如下的
子类:
AlertDialog:
一个通常可以带0,1,2个按钮,还可以包含单选或复选的列表。推荐使用,
它通常足够满足用户界面的需要了。
ProgressDialog:
显示为一个进度轮或进度条,因为它是扩展了的AlertDialog,它也同样支持按钮。
DatePickerDialog:
提供用户选择日期的对话框。
TimePickerDialog:
提供用户选择时间的对话框。
显示一个对话框
对话框通常都作为一个活动的一部分而被创建、显示,
通常我们可以重写活动内置的“onCreateDialog(int)”回调方法来创建。当我们重写了这个
回调查方法后,Android系统将自动管理对话框的状态,并将它与当前的活动关联,
某个活动将拥有对话框。也因此,对话框会继承活动的某些属性,例如:当一个对话框打开,
点击“Menu"按钮将显示此活动的"Options menu",音量键也将被活动用来调整音频流。
注意:如果对话框不是通过"onCreateDialog"方法创建的,那么意味着它没有被关联到一个活动
此时,必须调用“setOwnerActivity(Activity)”方法将它关联到一个对话框。
调用“showDialog(int)”来显示一个对话框,传递的整数是一个唯一值,用来标识当前要显示的对话框。
对话框第一次被请求时创建,系统将调用活动的“onCreateDialog(int)”,在此活动中实例化一个Dialog,
“onCreateDialog(int)”,“showDialog(int)”两个方法传入的整数是一样的。
一个对话框在显示前,系统都将调用回调方法“onPrepareDialog(int,Dialog)”,所以,如果可以通过
重写此方法可以动态修改对话框。由于"onCreateDialog(int)"只在第一次被请求时创建,所以,
后面再显示时将保持不变。"onPrepareDialog(int,Dialog)"这里的整型参数也与创建、显示时的一样。
当需要用到多个对话框的时候,我们最好在“onCreateDialog(int)”及“onPrepareDialog(int,Dialog)”
方法里Switch,通过对话框的唯一值(创建时传入的整型参数)用来判断一个每个对话框是否创建。
如:
static final int DIALOG_PAUSED_ID=0;
static final int DIALOG_GAMEOVER_ID=1;
而在“onCreateDialog(int)”回调查方法里:
protected Dialog onCreateDialog(int id)
{
Dialog dilog;
switch(id)
{
case DIALOG_PAUSED_ID:
{
//do the work to define the pause dialog
BREAK;
}
case DIAOLG_GAMEOVER_ID:
{
//
BREAK;
}
default:
dialog=null;
}
return dialog;
}
显示一个对话框:showDialog(DIALOG_GAMEOVER_ID);
---------------------------------------------------------------

清除对话框

当我们创建一个对话框并将它关联到一个活动后,活动将始终维护对话框的状态,如果确定活动不再需要对话框后,
可以让对话框调用dismiss()来自行清除,更为高效的做法是调用活动的dismissDialog(int),传递的整型数据
与创建时传入的一致。
也许有时我们需要在对话框被清除时处理一些业务,此时我们实现接口:DialogInterface.OnDismissListener,
这个接口只有一个方法:onDismiss(dialogInterface),此方法将在对话框被清除时调用。将接口的实现传递给
setOnDismissListener()。
一个对话框也可以被“取消”,如用户点出了“back”回退或点击“Cancel”按钮明确取消,此时并不会触发“onDismissListener”.
此类事件可以通过下面的方法进行捕获:DialogInterface.OnCancelListener,并 setOnCancelListener();

参考资料:http://developer.android.com/guide/topics/ui/dialogs.html


转:http://www.cnblogs.com/runner/archive/2011/12/04/2275293.html


分享到:
评论
Global site tag (gtag.js) - Google Analytics