首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android 根本控件 之 Dialog(一)基本知识介绍

2012-08-29 
Android 基本控件 之 Dialog(一)基本知识介绍转自:http://www.cnblogs.com/xirihanlin/archive/2009/08/03

Android 基本控件 之 Dialog(一)基本知识介绍

转自:http://www.cnblogs.com/xirihanlin/archive/2009/08/03/1537791.html,转载请说明,谢谢! ???

Dialog类实现为一个简单的漂浮窗口,完全在Activity中创建。使用基本的Dialog类,你可以创建一个新的实例并设定标题和布局,如下所示:

?

Dialog d = new Dialog(MyActivity.this);

// Have the new window tint and blur the window it

// obscures.

Window window = d.getWindow();

window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

d.setTitle(“Dialog Title”);

d.setContentView(R.layout.dialog_view);

TextView text = (TextView)d.findViewById(R.id.dialogTextView);

text.setText(“This is the text in my dialog”);

?

这里补充一下经过查看源码获取到的一些小知识点:

?

1.Dialog对象d的setContentView()方法其实调用的是Window对象window的setContentView()方法。

?

2.当我们通过setContentView()给当前的Window窗口设置了新的视图之后,应该通过该Window对象window来获取其中的控件。在本例中,我们通过d或window都是可以正确的获取到的。

?

TextView text = (TextView)window.findViewById(R.id.dialogTextView);

TextView text = (TextView)d.findViewById(R.id.dialogTextView);

?

?

一旦按照你的喜好完成配置,使用下面的方法显示它。

?

d.show();

?

AlertDialog类

?

AlertDialog类是最通用的Dialog实现之一。它提供了一些选项来让你对于最通用的对话框使用情形构建屏幕,包括:

?

? 提供1-3个可选按钮来向用户表达信息。这个功能可能和你在任何桌面编程中的经历相似,显示的按钮一般从OK、Cancel、Yes和No中选择。

?

? 以checkbox或radio Button的方式提供选项列表。

?

? 提供一个供用户输入的文本输入框。

?

创建一个AlertDialog UI,通过创建一个AlertDialog.Builder对象,如下所示:

?

AlertDialog.Builder ad = new AlertDialog.Builder(context);

?

然后,你可以设定显示的标题和信息,以可选的形式设定使用的按钮,选择项和用户输入框。还包括设定时间监听来处理用户交互。

?

接下来的代码给出了一个新的AlertDialog的例子,用于显示一个信息并提供两个按钮选项供选择。点击任何一个按钮,在执行完附加的Click Listener后自动关闭。

?

Context context = MyActivity.this;

String title = “It is Pitch Black”;

String message = “You are likely to be eaten by a grue.”;

String button1String = “Go Back”;

String button2String = “Move Forward”;

AlertDialog.Builder ad = new AlertDialog.Builder(context);

ad.setTitle(title);

ad.setMessage(message);

?

ad.setPositiveButton(button1String, new OnClickListener() {

public void onClick(DialogInterface dialog, int arg1) {

eatenByGrue();

}

});

?

ad.setNegativeButton(button2String, new OnClickListener(){

public void onClick(DialogInterface dialog, int arg1) {

// do nothing

}

});

?

ad.setCancelable(true);

?

ad.setOnCancelListener(new OnCancelListener() {

public void onCancel(DialogInterface dialog) {

eatenByGrue();

}

});

?

为了显示已经创建的AlertDialog,调用show方法。

?

ad.show();

?

可变通的,你可以在Activity中重写onCreateDialog和onPrepareDialog方法来创建单实例的对话框来保持它们的状态。这个技巧将在本章的后面进行尝试。

?

特殊的输入Dialog

?

对话框的一个主要用途是提供用户输入的界面。Android包含一些特殊的对话框,它们封装了控件为通用的用户输入请求提供了便利。它们包括以下的:

?

? DatePickerDialog

让用户从DatePicker View中选择一个日期。构造函数包含一个回调Listener,用来提示调用的Activity日期设定结束。

?

? TimePickerDialog

和DatePickerDialog相似,这个对话框让用户从一个TimePicker View中选择一个时间。

?

? ProgressDialog

一个在消息文本框下显示了一个进度条的对话框。常用于在一个耗时的操作中,让用户了解进行的进度。
?

使用和管理Dialog

?

与其在每次需要的时候创建新的对话框实例,不如利用Android提供的onCreateDialog和onPrepareDialog事件处理函数。在Activity中,通过这些处理函数来维护和管理对话框实例。

?

通过重写onCreateDialog方法,你可以设定需要创建的对话框,当调用showDialog时,显示指定的对话框。和给出的代码片段一样,重写的方法包含一个switch语句来决定哪个对话框需要使用:

?

static final private int TIME_DIALOG = 1;

@Override

public Dialog onCreateDialog(int id) {

switch(id)

{

case (TIME_DIALOG) :

AlertDialog.Builder timeDialog = new AlertDialog.Builder(this);

timeDialog.setTitle(“The Current Time Is...”);

timeDialog.setMessage(“Now”);

return timeDialog.create();

}

return null;

}

?

完成初始化的创建后,每次showDialog的调用都会触发onPrepareDialog处理函数。通过重写这个方法,你可以在对话框显示之前及时地修改它。在onPrepareDialog方法里,你可以实时的修改任何显示的值,如下面的片段所示,指定当前的时间给上面创建的对话框:

?

@Override

public void onPrepareDialog(int id, Dialog dialog) {

switch(id) {

case (TIME_DIALOG) :

SimpleDateFormat sdf = new SimpleDateFormat(“HH:mm:ss”);

Date currentTime;

currentTime = new Date(java.lang.System.currentTimeMillis());

String dateString = sdf.format(currentTime);

AlertDialog timeDialog = (AlertDialog)dialog;

timeDialog.setMessage(dateString);

break;

}

}

?

一旦你重写了这些方法,你可以通过调用showDialog来显示对话框,如下所示。传入你想显示的对话框的ID,Android会在显示之前创建(如果需要)和准备对话框:

?

showDialog(TIME_DIALOG);

?

作为改善资源利用的方式,这个技巧让你的Activity能处理对话框中的状态信息维持。如何的选择或数据输入(例如项目选择和文本输入)都会在每个对话框实例显示之间维持。

热点排行