安卓提供了丰富的对话框支持,它提供了如下4种常用的对话框。
- AlertDialog:功能最丰富、实际应用最广泛的对话框。
- ProgressDialog:进度对话框,这个对话框只是对进度条的包装。
- DataPickerDialog:日期选择对话框,这个对话框只是对DataPicker的包装。
- TimePickerDialog:时间选择对话框,这个对话框只是对TimePicker的包装。
其中,功能最强用法最灵活的是AlertDialog,应用广泛,其他的对话框都是其子类。
使用AlertDialog创建对话框
可以生成各种内容的对话框,实际上生成的对话框的结构是一定的,结构如下:
区域分为四个:
图标区,标题区,内容区,按钮区
创建一个对话框大概需要如下几个步骤:
- 创建AlertDialog.Builder对象
- 调用AlertDialog.Builder的setTitle()或者setCustomTitle()方法设置标题。
- 调用AlertDialog.Builder的setIcon()方法设置图标。
- 调用AlertDialog.Builder的相关方法设置对话框内容。
- 调用AlertDialog.Builder的setPositiveButton()、setNegtiveButton()或setNetralButton()方法添加多个按钮。
- 调用AlertDialog.Builder的creat()方法创建AlertDialog对象,再调用AlertDialog对象的show()方法将对话框显示出来。
在上面的6个步骤中,第4步是最灵活的,允许创建各种类型的对话框。归纳起来,AlertDialog提供了如下6种方法来指定对话框的内容。
- setMessage():设置对话内容为简单文本。
- setItems():设置对话框内容为简单列表项。
- setSingleChoiceItems():设置对话框内容为单选列表项。
- setMultiChoiceItems():设置对话框内容为多选列表项。
- setAdapter():设置对话框内容为自定义列表项。
- setView():设置对话框内容为自定义view。
栗子1:
显示提示消息的对话框
主要代码:
package com.example.mayn.dialog1;
import android.content.DialogInterface;
import android.icu.util.ValueIterator;
import android.net.Uri;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.text.BreakIterator;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bn=(Button)findViewById(R.id.button);
//为按钮绑定事件监听器
bn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
simple(v);
}
});
}
public void simple(View source)
{
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle("简单对话框")
.setIcon(R.drawable.ic_launcher_background)
.setMessage("对话框的测试内容\n第二行内容");
setPositiveButton(builder);
setNegativeButton(builder)
.create()
.show();
}
private AlertDialog.Builder setPositiveButton(
AlertDialog.Builder builder) {
//调用setPositiveButton方法添加“确定”按钮
return builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
}
private AlertDialog.Builder setNegativeButton(
AlertDialog.Builder builder) {
return builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
private BreakIterator show;
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
}
}
栗子2:
简单列表项对话框
调用AlertDialog.Builder的setItems()方法即可设置简单列表项对话框,调用该方法时需要传入一个数组或数组资源的资源ID。
下面用setItems()来设置简单列表项对话框
主要代码:
package com.example.mayn.dialog2;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.text.BreakIterator;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//第一个按钮
Button bn = (Button) findViewById(R.id.button);
//为按钮绑定事件监听器
bn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
simple(v);
}
});
//第二个按钮
Button bn2 = (Button) findViewById(R.id.button2);
//为按钮绑定事件监听器
bn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
simpleList(v);
}
});
}
public void simple(View source) {
AlertDialog.Builder builder = new AlertDialog.Builder(this).setTitle("简单对话框").setIcon(R.drawable.ic_launcher_background).setMessage("对话框的测试内容\n第二行内容");
setPositiveButton(builder);
setNegativeButton(builder).create().show();
}
private AlertDialog.Builder setPositiveButton(AlertDialog.Builder builder) {
//调用setPositiveButton方法添加“确定”按钮
return builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
}
private AlertDialog.Builder setNegativeButton(AlertDialog.Builder builder) {
return builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
private BreakIterator show;
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
}
String[] items = new String[]{"疯狂安卓讲义", "疯狂Ajax讲义"};
/*
* 简单列表项对话框
*/
public void simpleList(View source) {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
//设置对话框标题
.setTitle("简单列表对话框")
//设置图标
.setIcon(R.drawable.ic_launcher_background)
//设置简单的列表项内容
.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
//添加确定按钮
setPositiveButton(builder);
//添加取消按钮
setNegativeButton(builder).create().show();
}
}
栗子3
单选列表项对话框
只要调用AlertDialog.Builder的setSingleChoiceItems()方法即可创建单选列表项的对话框。调用setSingleChoiceItems()方法时既可传入数组作为参数,也可传入Cursor(相当于数据库查询结果集)作为参数,还可以传入ListAdapter作为参数。如果传入ListAdapter作为参数,则由ListAdapter来提供多个列表项组件。
主要代码
/*单选列表项对话框*/
public void singleChoice(View source)
{
AlertDialog.Builder builder = new AlertDialog.Builder(this)
//设置对话框标题
.setTitle("单选列表项对话框")
//设置图标
.setIcon(R.drawable.ic_launcher_background)
//设置单选列表项,默认选中第二项(索引为1)
.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
TextView show = (TextView) findViewById(R.id.show);
show.setText("你选中了《"+items[which]+"》");
}
});
//添加确定按钮
setPositiveButton(builder);
//添加取消按钮
setNegativeButton(builder).create().show();
}
}
备注:这里特地贴上三个例子的完整代码下载地址:下载代码