首先,我们来看各种样式的对话框。Dialog有很多子类实现,因此我们需要定义一个对话框,然后使用其子类来实例化一个。而不要直接使用Dialog这个父类来构造。
今天我们重点要了解的是AlertDialog对话框。AlertDialog是Dialog的一个直接子类。使用AlertDialog,我们可以显示一个标题、最多3个按钮操作以及一组选择框或自定义的弹出框。这里借用Android官方文档提供的一张图来了解AlertDialog框的组成:
1. 区域1定义了弹出框的头部信息,包括标题名或图标。
2. 区域2是AlertDialog对话框的content部分,在这里我们可以设置一些message信息,或者是定义一组选择框,还可以定义自定义布局的弹出框。
3. 区域3是Action Buttons部分,这里我们可以定义操作按钮。
在AlertDialog中,定义按钮是通过setXXXButton方法完成的,其中有三种不同的Action Buttons供我们选择。每种action buttons最多只能出现一个,即弹出对话框最多只能出现一个PositiveButton。
接下来,我们通过具体的实例来看看常用的几种AlertDialog对话框:
1. 弹出一个警告框,并有三个按钮可选择
代码部分如下:
要创建一个AlertDialog对话框,需要使用AlertDialog的一个内部类,即AlertDialog.Builder来构建一个AlertDialog的对话框,然后通过setXX方法来设置想要显示的内容。
我们可以看到,我们一共设置了3个action buttons,每一个button都为其绑定了一个DialogInterface.OnClickListener()的监听事件。然后在里面通过Toast吐司对话框(这个在后面随笔中会讲解)来弹出一些信息。which方法表示的是action button所代表的int值:which=-1表示点击的是确定按钮,-2表示点击的是取消按钮,-3表示点击的是忽略按钮。
2. 下拉列表弹出框
关键代码如下:
在这里,我们通过`setItems(CharSequence[] items, DialogInterface.OnClickListener listener)`方法来设置一个下拉列表框。需要注意的是,由于下拉列表框或下拉多选框都是显示在Content中的,所以message和下拉列表框这些是不能同时存在的。
我们还可以为它绑定一个`DialogInterface.OnClickListener`监听器,当选中一个选项时,对话框就会消失。这里的`which`代表的是下拉列表的每个选项的索引,通过这个我们可以轻松得到用户选中的是哪一个选项。
3. 弹出一个下拉单选框
注意:在弹出下拉单选框时,当我们选中一个选项,对话框是不会消失的,我们需要点击action button才能让对话框消失。
4. 弹出一个下拉多选框
在设置下拉多选框时使用的是`setMultiChoiceItems`方法,其各个参数的含义已经在上面代码中阐述了。
同样,对于下拉多选框,当我们选中其中一个选项时,对话框是不会消失的,只有点击了action button才会消失。
5. 自定义弹出对话框
对于自定义弹出对话框,我们就需要自己指定一个自定义的布局文件了。下面是一个最简单的输入用户名和密码的两个EditText的例子:dialog.xml
关键代码:
通过自定义弹出框,我们首先需要写一个xml的布局文件,然后在里面定义我们的布局。我们不需要在布局文件里定义Button按钮,可以通过`AlertDialog.Builder`来设置action buttons。
```java
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setView(view);
```