首页 > 代码库 > Android开发弹出对话框

Android开发弹出对话框

在 GUI 程序中,有时需要弹出对话框来提示一些信息。这些对话框比一个独立的屏幕简单,在 Android 中弹出
式对话框不同于表示一个屏幕的活动,它通常用于简单的功能处理。
对话框的父类是 android.app.Dialog,通过构建类 android.app.AlertDialog 来实现弹出式对话框,可以使用
AlertDialog.Builder 和不同的参数来构建对话框。 参考示例程序:Dialog
(ApiDemo => App=>Dialog)

源代码:com/example/android/apis/app/AlertDialogSamples.java 布局文件:
alert_dialog.xml
Dialog 程序的运行结果如图所示:



通过点击屏幕上的不同按钮(第 4 个按钮除外)将会启动不同的对话框。 实现方法
是继承 onCreateDialog()函数,返回一个 Dialog 类型:
@Override
protected Dialog onCreateDialog(int id) {
}
onCreateDialog()函数的参数 id 是区分对话框的标示,当调用对话框的时候需要调用 showDialog()。
public final void showDialog (int id)
showDialog()函数也是通过 id 来区分对话框。通过 showDialog()和 onCreateDialog()函数可以统一活动中的对话
框。


提示信息和两个按钮的对话框
第 1 个按钮(OK Cancel dialog with a message)启动一个提示信息和两个按钮的对话框,如图所示:


图 提示信息和两个按钮的对话框
代码实现的片断如下所示:
return new AlertDialog.Builder(AlertDialogSamples.this)
.setIcon(R.drawable.alert_dialog_icon)
.setTitle(R.string.alert_dialog_two_buttons_title)
.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int whichButton) {
/* 左键事件 */
}
})
.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int whichButton) {
/* 右键事件 */
}
})
其中,setPositiveButton 表示设置的左面的按钮,setNegativeButton 表示设置的右面的按钮,这两个按钮是
确定的,但是可以设置其显示的字符和点击后的行为函数。


提示信息和三个按钮的对话框
第 2 个按钮(OK Cancel dialog with a long message)启动一个提示信息和三个按钮的对话框,如图所示:


图 提示信息和三个按钮的对话框
代码实现的片断如下所示:
return new AlertDialog.Builder(AlertDialogSamples.this)
.setIcon(R.drawable.alert_dialog_icon)
.setTitle(R.string.alert_dialog_two_buttons_msg)
.setMessage(R.string.alert_dialog_two_buttons2_msg)
.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int whichButton) {
/* 左键事件 */
}
})
.setNeutralButton(R.string.alert_dialog_something, new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int whichButton) {
/* 中键事件 */
}
})
.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int whichButton) {
/* 右键事件 */
}
})
本对话框包含了 3 个按钮,与上一个例子的主要区别在于这里使用了 setNeutralButton()表示的设置中间的按钮。

列表项对话框
第 3 个按钮(List dialog)启动一个列表项对话框,如图所示;


图 列表项对话框
代码实现的片断如下所示:
return new AlertDialog.Builder(AlertDialogSamples.this)
.setTitle(R.string.select_dialog)
.setItems(R.array.select_dialog_items, new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int which) {
String[] items =
getResources().getStringArray(R.array.select_dialog_items);
new AlertDialog.Builder(AlertDialogSamples.this)
.setMessage("You selected: " + which + " , " + items[which])
.show();
}
})
这里使用了 setItems()表示设置几个不同的项目,从 res/values/array.xml 文件中取得 select_dialog_items 的内容,
这部分内容如下所示:
<string-array name="select_dialog_items">
<item>Command one</item>
<item>Command two</item>
<item>Command three</item>
<item>Command four</item>
</string-array>
这里的 Item 也设置了点击函数,因此它们被点击后,也会弹出新的对话框。


 单选项和按钮对话框
第 5 个按钮(Single choice list)启动一个单选项和按钮对话框;


图 单选项和按钮对话框
代码实现的片断如下所示:
return new AlertDialog.Builder(AlertDialogSamples.this)
.setIcon(R.drawable.alert_dialog_icon)
.setTitle(R.string.alert_dialog_single_choice)
.setSingleChoiceItems(R.array.select_dialog_items2, 0, new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int whichButton) {
}
})
.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int whichButton) {
/* 左键事件 */
}
})
.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int whichButton) {
/* 右键事件 */
}
})
本例是一 个 包含单选 项 的对话框 , 其中的选 项 使用了更 简 单的模式 , 从 res/values/array.xml 文 件中取得
select_dialog_items2 中的内容作为单选项的项目。 这部分的
内容如下所示:
<string-array name="select_dialog_items2">
<item>Map</item>
<item>Satellite</item>
<item>Traffic</item>
<item>Street view</item>
</string-array>

复选项和按钮对话框
第 6 个按钮(Repeat alarm)启动一个复选项和按钮对话框;


图 复选项和按钮对话框
代码实现的片断如下所示:
return new AlertDialog.Builder(AlertDialogSamples.this)
.setIcon(R.drawable.ic_popup_reminder)
.setTitle(R.string.alert_dialog_multi_choice)
.setMultiChoiceItems(R.array.select_dialog_items3,
new boolean[]{false, true, false, true, false, false, false},
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int whichButton,
boolean isChecked) {
/* 点击复选框的响应 */
}
})
.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int whichButton) {
/* 左键事件 */
}
})
.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int whichButton) {
/* 右键事件 */
}
})
.create();
本例是一个包含复选项的对话框,从 res/values/array.xml 文件中取得 select_dialog_items3 中的内容作为单选项的
项目:
<string-array name="select_dialog_items3">
<item>Every Monday</item>
<item>Every Tuesday</item>
<item>Every Wednesday</item>
<item>Every Thursday</item>
<item>Every Friday</item>
<item>Every Saturday</item>
<item>Every Sunday</item>
</string-array>

 文本的按键对话框(使用布局文件)
第 7 个按钮(Text Entry dialog)启动一个包含文本的按键对话框。
Dialog 程序中调用各个对话框的效果如图所示:


图 文本的按键对话框
代码实现的片断如下所示:
LayoutInflater factory = LayoutInflater.from(this);
final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry,
null);
return new AlertDialog.Builder(AlertDialogSamples.this)
.setIcon(R.drawable.alert_dialog_icon)
.setTitle(R.string.alert_dialog_text_entry)
.setView(textEntryView)
.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int whichButton) {
/* 左键事件 */
}
})
.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface dialog, int whichButton) {
/* 右键事件 */
}
})
.create();
}
alert_dialog_text_entry.xml 也是一个布局文件,其中包含了 2 个文本框和 2 个可编辑文本,这就是显示在屏幕上
的内容,由此根据这种模式,也可以在弹出的对话框中使用布局文件。
由此,在这个对话框中,包含了这些相应的控件。
如上面对话框的效果所示,对话框可以设置标题、图标、提示信息、最多 3 个按钮、单选项、复选项,甚至可
以设置一个 View。最后一个对话框是通过设置一个 View 来实现的,设置的内容在布局文件 alert_dialog_text_entry.xml
中。
对话框的类为 android.app.Dialog,通过 android.app.AlertDialog.Builder 类来建立,在建立的过程中可以进行多项
设置。
• setIcon()和 setTitle():用于设置图标和标题;
• setMessage():用于设置提示信息;
• setPositiveButton()、setNeutralButton()和 setNegativeButton():用于设置左、中、右按钮;
• setSingleChoiceItems()和 setMultiChoiceItems():用于设置单选项和复选项;
• setView():用于设置一个 View 作为对话框的内容。
以上函数的返回类型均为 android.app.AlertDialog.Builder,也就是这个类本身,因此可以使用如下的方式进行连
续调用来设置更多的内容。
设置完成后调用 create()函数返回 android.app.AlertDialog 类,这个类表示一个可以使用的对话框。
在 Android 中使用对话框,可以在没有 Activity 的情况下建立一个比较简易的窗体,基本界面可以通过直接设置
得到,通过 setView()可以获得任意内容的界面。

Android开发弹出对话框