- Android 7应用程序开发教程
- 李波
- 861字
- 2020-08-28 20:27:28
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代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P137_161930.jpg?sign=1739629893-ojURFJyXtk2kP2hxTqONNRPYGtzTsvKR-0-ce04a5a8191e3cd2e7e37f84a2eee52b)
其运行效果如图4.41所示。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P138_97169.jpg?sign=1739629893-bVwCEg5RfeIyfcuqjz9E2W1X1MyOzq2e-0-d83447c6d47346c33f76ce02da796864)
图4.41 AlertDialog的运行效果
处理AlertDialog按钮单击事件的代码为:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P138_161934.jpg?sign=1739629893-p6VvI9hL50wSIUlm63Mhaw0LmE0fS4nI-0-bcbc30276987f5031ca4e6218d23f412)
单击AlertDialog按钮,调用showDialog(ALERT_DLG),系统回调onCreateDialog(int id)方法,创建并弹出AlertDialog对话框,如图4.42所示。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P138_97170.jpg?sign=1739629893-CD8ndX8EjGE4q1jM7FxsLwktjgvWjNTZ-0-1ed4d15bd30bdc385ca34ca3da63134a)
图4.42 单击AlertDialog按钮的效果
相关代码为:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P139_161949.jpg?sign=1739629893-qYkaViAMu2c6TrTgzHzWen8vPw25R0EJ-0-9e0714c3754fde89f5feb0c907df1184)
onCreateDialog()方法中创建了带有三个按钮的AlertDialog,并且为每个按钮添加了事件处理方法,以便获知用户单击了哪个按钮。
4.7.2 ProgressDialog
ProgressDialog是一个带有进度条的对话框,当应用程序在完成比较耗时的工作时,使用该对话框可以为用户提供一个总进度上的提示。
为main.xml布局中的ProgressDialog按钮添加事件处理代码:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P140_161950.jpg?sign=1739629893-zoeBbjuGxeb94j015pF4xnn6xelu3nzI-0-34238881424c7d7d4681df25173ad752)
单击ProgressDialog按钮,调用showDialog(PROGRESS_DLG),系统回调onCreateDialog(int id)方法,创建并弹出ProgressDialog对话框,如图4.43所示。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P140_97489.jpg?sign=1739629893-DfbG89gk64F6UvopeNqkzbY78tOm0ffH-0-cf467569f608664b35d54abf3e6f18d1)
图4.43 单击ProgressDialog按钮的效果
onCreateDialog()方法中的相关代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P140_161951.jpg?sign=1739629893-3oB1KJDg8pYEwPkdCoAjQWwEzsn5kjGx-0-9a2f75a5085e16feca865466f439e139)