- 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=1739220095-jlAspPUlQRG1RIRfNH29CnI5N63O6tCC-0-62bf82ee063d4eccbe2b2e7dada74b1e)
其运行效果如图4.41所示。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P138_97169.jpg?sign=1739220095-SUlCLJeaZeJ5a3GTHauK2vJoPALrs3p8-0-ad476748b6610bae87ff445194a960cd)
图4.41 AlertDialog的运行效果
处理AlertDialog按钮单击事件的代码为:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P138_161934.jpg?sign=1739220095-DWbs0oyIrxU2hgpz1XhIIT6kdhlXQt4D-0-35e273bbc6832443b241cff30577dc97)
单击AlertDialog按钮,调用showDialog(ALERT_DLG),系统回调onCreateDialog(int id)方法,创建并弹出AlertDialog对话框,如图4.42所示。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P138_97170.jpg?sign=1739220095-HNHRPV2mvT5XztAmp1c17eMgehOq5k8C-0-88170cf205f4479f7813cca3abff3bee)
图4.42 单击AlertDialog按钮的效果
相关代码为:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P139_161949.jpg?sign=1739220095-5v1gl3DcBa6JTHdE6FYK2tLcTpPQLQPh-0-f55f1d7f6a5513e9154b3cdd3d46daa2)
onCreateDialog()方法中创建了带有三个按钮的AlertDialog,并且为每个按钮添加了事件处理方法,以便获知用户单击了哪个按钮。
4.7.2 ProgressDialog
ProgressDialog是一个带有进度条的对话框,当应用程序在完成比较耗时的工作时,使用该对话框可以为用户提供一个总进度上的提示。
为main.xml布局中的ProgressDialog按钮添加事件处理代码:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P140_161950.jpg?sign=1739220095-AmlcIo4hBP1s4vnVTGguMGITtPFQMcOW-0-0bbf426e2d68f6860494f0f2d8fb4ba8)
单击ProgressDialog按钮,调用showDialog(PROGRESS_DLG),系统回调onCreateDialog(int id)方法,创建并弹出ProgressDialog对话框,如图4.43所示。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P140_97489.jpg?sign=1739220095-tgM33ZVK6KLcOn1KhO4f2dxsVOeC2nfV-0-2a24840ea90ca97b088c5832d0656fa9)
图4.43 单击ProgressDialog按钮的效果
onCreateDialog()方法中的相关代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P140_161951.jpg?sign=1739220095-CpcmMImi356vypYVE51OyIFP6CgXsxpo-0-4d8f5e1dc9b42fe5e57cd7e63057d975)