前言
Android 开发中是百分之一万会用到对话框的,对话框是一种有效的与用户进行信息交互的手段,对话框的种类也很多,这里介绍四种常用的对话框 —— 普通对话框(确定取消对话框)、单选对话框、多选对话框、进度条对话框。
其中前三种的创建方式大同小异,用的是同一个类AlertDialog,但是不能直接new,因为这个类的构造方法是Protected,也就是说只有同一个包下或者子类才能去new,但google这样设计是有道理的,因为google为了方便程序猿更有效统一的创建对话框,给我们提供了一套创建对话框的机制;进度条对话框使用的是ProgressDialog类,可以直接去new。
先来看一下界面(不要在意丑的细节)
1.确定取消对话框
//点击按钮创建对话框
public void click(View view) {
//创建对话框构建器对象,类似工厂模式
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置图标(可选)
builder.setIcon(android.R.drawable.ic_dialog_alert);
//设置标题(可选)
builder.setTitle("警告");
设置内容(可选)
builder.setMessage("这是一个警告信息,您确定要退出吗");
//设定确定按钮
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,"确定按钮点击",Toast.LENGTH_SHORT).show();
}
});
//设定取消按钮
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,"取消按钮点击",Toast.LENGTH_SHORT).show();
}
});
//使用构建器创建出对话框对象
AlertDialog dialog = builder.create();
//显示对话框,不执行这句话对话框是不会显示的....
dialog.show();
//可以用下面的方式代替上面的两行
//builder.show();
}
点击确定取消对话框按钮,运行结果:
2.单选对话框
public void singleClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(android.R.drawable.ic_dialog_info);
builder.setTitle("请选择您的性别");
//一定不能setMessage,否则该内容会覆盖单选对话框选项
//builder.setMessage("这是一个单选对话框信息");
//要展示的单选选项的字符序列数组
final String[] items = new String[] {
"男",
"女",
"女博士"
};
//设置单选选项
//arg1 要展示的选项的文本
//arg2 表示默认已选中的item, -1表示没有默认被选中的选项
builder.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
//arg1: dialog是触发此方法执行的对话框
//arg2: which哪一个item被选中
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,items[which],Toast.LENGTH_SHORT).show();
//单选结束让对话框消失
dialog.dismiss();
}
});
//显示对话框
builder.show();
}
点击单选对话框,运行结果:
注意:
如果设置了builder.setMessage(“这是一个单选对话框信息”);则会覆盖单选选项(多选也是),如图:
3.多选对话框
public void multiClick(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(android.R.drawable.ic_dialog_info);
builder.setTitle("请选择您的爱好");
//要展示的多选选项的字符序列数组
final String[] items = new String[] {
"吃",
"喝",
"玩",
"乐"
};
//默认已选中的哪些item
final boolean[] checkedItems = new boolean[] {
true,
false,
true,
false
};
//设置多选选项,任何选项被选中都会被执行
builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
//记录用户的选择
checkedItems[which] = isChecked;
}
});
//多选完成后,点击确定来让对话框消失
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//拼接选中的选项
String text = "";
for (int i=0; i<checkedItems.length; i++) {
text += checkedItems[i]? items[i] + " " : "";
}
Toast.makeText(MainActivity.this,text + "被选中", Toast.LENGTH_SHORT).show();
}
});
//显示对话框
builder.show();
}
点击多选对话框按钮,运行结果:
4.进度条对话框
public void progressClick(View view) {
//创建进度条对话框
final ProgressDialog dialog = new ProgressDialog(this);
dialog.setIcon(android.R.drawable.ic_dialog_info);
dialog.setTitle("正在加载 请稍后 ...");
//设置为水平进度条,默认是圈圈进度条
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//设置进度最大值
dialog.setMax(100);
//模拟加载过程
new Thread(new Runnable() {
@Override
public void run() {
for (int i=0; i<100; i++) {
//设置当前进度
dialog.setProgress(i);
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//加载完成后,进度条消失
dialog.dismiss();
}
}).start();
//显示对话框
dialog.show();
}
点击进度条对话框,运行结果:
补充:
可以使用 setCancelable(false)方法,来设置当点击返回键或者屏幕空白区域的时候,对话框不消失。