
4.7 对话框
对话框是人机交互过程中十分常见的组件,一般用于在特定条件下对用户显示一些信息,可以增强应用的友好性。
Dialog类是对话框的基类。对话框虽然可以在界面上显示,但是Dialog不是View类的子类,而是直接继承自java.lang.Object类。Dialog对象也有自己的生命周期,其生命周期由创建它的Activity进行管理。Activity可以调用showDialog(int id)将不同ID的对话框显示出来,也可以调用dismissDialog(int id)方法将ID标识的对话框从用户界面中关闭掉。当Activity调用了showDialog(ID)方法,对应ID的对话框没有被创建时,Android系统会回调OnCreateDialog(ID)方法来创建具有该ID的对话框。在Activity中创建的对话框都会被Activity保存,下次showDialog(ID)方法被调用时,若该ID的对话框已经被创建,则系统不会再次调用OnCreateDialog(ID)方法创建该对话框,而是会回调onPrepareDialog(int id, Dialog dialog)方法,该方法允许对话框在被显示之前做一些修改。
常用的对话框有AlertDialog和ProgressDialog,本节将通过实例讲解这两种对话框的使用方法。
4.7.1 AlertDialog
AlertDialog对话框是十分常用的用于显示信息的方式,最多可提供三个按钮。AlertDialog不能直接通过构造方法构建,而要由AlertDialog.Builder类来创建。AlertDialog对话框的标题、按钮以及按钮要响应的事件也由AlertDialog.Builder设置。
在使用AlertDialog. Builder创建对话框时常用的几个方法如下。
• setTitle():设置对话框中的标题。
• setIcon():设置对话框中的图标。
• setMessage():设置对话框的提示信息。
• setPositiveButton():为对话框添加yes按钮。
• setNegativeButton():为对话框添加no按钮。
• setNeutralButton():为对话框添加第三个按钮。
下面通过实例来学习创建AlertDialog的方法。
创建Android工程DialogDemo,并在main.xml中添加两个按钮,分别为AlertDialog和ProcessDialog。
其main.xml代码如下:

其运行效果如图4.41所示。

图4.41 AlertDialog的运行效果
处理AlertDialog按钮单击事件的代码为:

单击AlertDialog按钮,调用showDialog(ALERT_DLG),系统回调onCreateDialog(int id)方法,创建并弹出AlertDialog对话框,如图4.42所示。

图4.42 单击AlertDialog按钮的效果
相关代码为:

onCreateDialog()方法中创建了带有三个按钮的AlertDialog,并且为每个按钮添加了事件处理方法,以便获知用户单击了哪个按钮。
4.7.2 ProgressDialog
ProgressDialog是一个带有进度条的对话框,当应用程序在完成比较耗时的工作时,使用该对话框可以为用户提供一个总进度上的提示。
为main.xml布局中的ProgressDialog按钮添加事件处理代码:

单击ProgressDialog按钮,调用showDialog(PROGRESS_DLG),系统回调onCreateDialog(int id)方法,创建并弹出ProgressDialog对话框,如图4.43所示。

图4.43 单击ProgressDialog按钮的效果
onCreateDialog()方法中的相关代码如下:
