一.相关概念
一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户交互. 对话框一般用于提示信息和与当前应用程序直接相关的小功能.
Android API 支持下列类型的对话框对象:
(一)警告对话框 AlertDialog: 一个可以有0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以创建大多数的交互界面, 是推荐的类型.
(二)进度对话框 ProgressDialog: 显示一个进度环或者一个进度条. 由于它是AlertDialog的扩展, 所以它也支持按钮.
(三)日期选择对话框 DatePickerDialog: 让用户选择一个日期.
(四)时间选择对话框 TimePickerDialog: 让用户选择一个时间
二.AlertDialog的创建和使用
(一)Dialog的创建和使用
// 普通的对话框,普通的对话框功能很少,除非重写类
public void bt1(View v) {
// 创建对话框对象
Dialog dialog = new Dialog(this);
// 创建对话框内容
dialog.setTitle(“对话框的标题”);
// 显示对话框
dialog.show();
}
讯享网
运行后显示结果:

讯享网
可以看到有一个标题的对话框,而且这里没有设置内容的属性,Dialog的使用方法和功能都是很少的,不建议使用。
// 警告对话框,需要用Builder方法创建
public void bt2(View v) {
// 这里的属性可以一直设置,因为每次设置后返回的是一个builder对象
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置提示框的标题
builder.setTitle(“提示标题”).
// 设置提示框的图标
setIcon(R.drawable.ic_launcher).
// 设置要显示的信息
setMessage(“文本的提示信息:你妈喊你回家吃饭了!”).
// 设置确定按钮
setPositiveButton(“确定”, new OnClickListener() {
讯享网 @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "选择就确定哦", 0).show(); } }). // 设置取消按钮,null是什么都不做 setNegativeButton("取消", null). // 设置退出按钮,在中间的按钮 setNeutralButton("退出", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 退出程序 finish(); } }); // 生产对话框 AlertDialog alertDialog = builder.create(); // 显示对话框 alertDialog.show(); }
程序运行后显示的结果:

这里如果点击取消,对话框消失,什么都没有做。
如果点击退出,会直接退出程序。
如果点击确定,会弹出一个土司,提示你。
这里可以根据用户的选择做出相应的行为。
//数据源 String[] array = new String[] { "音乐", "体育", "舞蹈", "看书" }; // 显示一个菜单的对话框选项,点击选择菜单后,菜单会消失 // 匿名类去创建 public void bt3(View v) { final AlertDialog.Builder builder = new AlertDialog.Builder(this); // 设置标题 builder.setTitle("选择你最喜欢的课程"). // 设置可选择的内容,并添加点击事件 setItems(array, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // which代表的是选择的标签的序列号 Toast.makeText(MainActivity.this, "选择" + array[which], 0).show(); } }). // 产生对话框,并显示出来 create().show(); }
程序运行后显示的结果:

设置菜单是builder的setItem方法来完成的。
点击某一个菜单选项后对话框会自动消失,所以这里设置按钮也是没有什么用处的。
这里还能监听点击菜单的事件,获取用户的选择内容。
代码设计:
// 单选按钮的对话框,选择一个按钮值后,
// 对话框也是不会自动消失,需要自己关闭
// 要设置按钮,点击按钮后对话框才会消失
public void bt4(View v) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置标题
builder.setTitle(“选择你最喜欢的课程”).
// 设置可选择的内容,并添加点击事件
// 第一个参数是可以选择的单选框的内容
// 第二个参数是默认选中的项
// 第三个参数是点击选中的监听器
setSingleChoiceItems(array, 0, new OnClickListener() {
讯享网 @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "选择" + array[which], 0).show(); } }). // 因为对话框不会自动消失,所以要添加按钮的必要 // 设置确定按钮 setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "选择确定", 0).show(); } }). // 取消,什么都不做,对话框消失而已 setNegativeButton("取消", null). // 产生对话框,并显示出来 create().show(); }
运行后的结果:

设置单选菜单是builder的setSingleChoiceItem方法来完成的。
这里要可以设置两个监听事件,一个是单选按钮某一个选项被选中时触发的,另一个是点击按钮时触发的事件。
程序中每次选中一个单选按钮都会弹出一个吐司,提示你选择的内容,点击确定后也会显示一个吐司。
1
2
3
(五)多选项的对话框设计
多选框的显示和单选的显示也是有点相似的,都是需要设置按钮来使对话框消失。
代码如下:
// 多选按钮的对话框
// 对话框也是不会自动消失,需要自己关闭
// 要设置按钮,点击按钮后对话框才会消失
public void bt5(View v) {
// 多选按钮的默认状态 boolean[] checkedItems = { true, false, false, true }; // 多选按钮选中后保存的数据 final List<String> list = new ArrayList<String>(); // 默认的数据 list.add("音乐"); list.add("看书"); // 创建对话框的builder对象 final AlertDialog.Builder builder = new AlertDialog.Builder(this); // 设置标题 builder.setTitle("选择你最喜欢的课程"). // 设置可选择的内容,并添加点击事件 // 第一个参数是可以选择的选框的内容 // 第二个参数是一个布尔数组,如果是true代表的是默认选中 // 第三个参数是点击选中的监听器 setMultiChoiceItems(array, checkedItems, new OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { // 这里无论某个选项是被选中后被取消都会触发该方法 // which代表的是选中的是多少游标值的选项 // isChecked是代表该选项是或否选中了 // 判断如果集合中有某个数据,就把他移除,否则就添加数据 // 注意这里数选择之后的状态 if (isChecked) { // 添加数据 list.add(array[which]); } else { // 移除数据 list.remove(array[which]); } } }). // 因为对话框不会自动消失,所以要添加按钮的必要 // 设置确定按钮 setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "你选中了" + list, 0) .show(); } }). // 取消,什么都不做,对话框消失而已 setNegativeButton("取消", null). // 产生对话框,并显示出来 create().show(); }
程序运行后的结果:

设置多选菜单是builder的setMultiChoiceItem方法来完成的。
这里要可以设置两个监听事件,一个是选项框的某一个选项的状态改变时触发的,另一个是点击按钮时触发的事件。
程序中每次改变选项的内容,保存数据的集合都会改变,点击确定后也会显示一个吐司,显示集合里面的内容。
选择全部内容后,确定,显示的结果:

(六)使用适配器显示对话框
使用适配器显示对话框和显示菜单对话框类似,都是选中对应选项后,对话框自动消失,但是使用适配器可以显示很负责的界面。
// 使用适配器显示对话框–>builder的setAdapter方法
// 这里选择一个选项后,对话框就会关闭,所以是不需要设置按钮的
// 其实这里可以设置很复杂的适配器对象,但是实际应用中不会在对话框显示太复杂的布局
public void bt6(View v) {
讯享网 // 创建ArrayAdapter适配器 // android.R.layout.simple_list_item_1是Android系统里面的简单布局 // 第三个参数是数据源 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array); // 创建对话框对象 new AlertDialog.Builder(this). // 设置标题 setTitle("使用适配器显示数据"). // 添加适配器,并为适配器添加点击事件 setAdapter(adapter, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // which是选择的条目的游标值 Toast.makeText(MainActivity.this, "选择" + array[which], 0).show(); } }). // 产生并显示 create().show(); }
运行程序后显示的结果:

设置多选菜单是builder的setAdapter方法来完成的。
这里要设置一个监听事件,适配器的监听事件。
这里点击某一个选项后,对话框消失,并土司选中的内容。
(七)设计一个有输入框的对话框
// 设置一个有输入文本的对话框---->builder的setView方法
// 输入数据后,对数据进行处理
// 这里要设置按钮,才能对数据的数据进行处理
public void bt7(View v) {
// 创建一个EditText对象 final EditText et = new EditText(this); // 创建对话框对象 new AlertDialog.Builder(this). // 设置标题 setTitle("有输入框的对话框"). // 添加输入的文本框 setView(et). // 添加确定按钮 setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 获取输入的字符 String in = et.getText().toString(); Toast.makeText(MainActivity.this, "输入;" + in, 0).show(); } }).setNegativeButton("取消", null). // 产生并显示 create().show(); }
运行后的结果:

设置输入框是builder的setView方法来完成的。
这里要设置一个按钮监听事件。
这里点击确定按钮后,获取输入框的内容并土司出来。
讯享网// 使用对话框内的控件来关闭对话框 public void bt8(View v) { // 创建一个EditText对象 final Button btn = new Button(this); // 给按钮设置文字 btn.setText("关闭对话框"); // 创建对话框对象 final AlertDialog dialog = new AlertDialog.Builder(this). // 设置标题 setTitle("通过按钮关闭对话框"). // 添加输入的文本框 setView(btn). // 产生 create(); // 设置对话框不可以关闭,一般情况下对话框是失去焦点后自动消失的 // 但是加 了.setCancelable(false),对话框就不会消失,除非手动退出 dialog.setCancelable(false); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 点击后关闭对话框,两种方法都可以 dialog.cancel(); //dialog.dismiss(); } }); // 显示 dialog.show(); //给对话框设置一个监听时间,对话框退出前会执行 dialog.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { // 只要关闭都会调用 Toast.makeText(MainActivity.this, "关闭", Toast.LENGTH_SHORT) .show(); } }); }
运行结果:

这里设置了dialog.setCancelable(false);的属性,代表了对话框不能随着焦点的失去而消失对话框,要收到关闭对话框,要么设置确定和取消按钮,要么在对话框布局中设置能够关闭对话框的控件;


这里分上、中、下三部分。
区域一是标题相关
区域二是主体相关
区域三是按钮相关
1.区域1那里就是定义弹出框的头部信息
包括标题名或者是一个图标。
(1)setTitle : 为对话框设置标题
(2)setIcon : 为对话框设置图标
2.区域2那里是AlertDialog对话框的content部分
在这里我们可以设置一些message信息,或者是定义一组选择框,还可以定义我们自己的布局弹出框。
(1)setMessage: 为对话框设置内容,如果设置了其他内容,那么Message不要设置,否者只显示Message。
(2)setView: 给对话框设置自定义View
setItems: 设置对话框要显示的一个list,一般用于显示几个命令时
//items是传入一个字符串数组,或者是R文件中的数组
(3)setSingleChoiceItems: 用来设置对话框显示一系列的单选按钮
(4)setMultiChoiceItems: 用来设置对话框显示一系列的复选框
3.区域3那里使我们的Action Buttons部分
这里我们可以定义我们的操作按钮。
在AlertDialog中,定义按钮都是通过 setXXXButton 方法来完成,其中一共有3种不同的Action Buttons供我们选择:
(1)setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)
这是一个相当于OK、确定操作的按钮.
(2)setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener)
这是一个相当于取消操作的按钮。
触发相关按钮都的行为都是我们程序员自己定的,比如你可以设置点击确定后关闭页面,也可以设置点击取消后关闭页面。但是我们设计的时候还是要按照大部分人的阅读习惯来设定。
4.监听事件的说明
在AlertDialog的各种设置中,都充斥着DialogInterface.OnClickListener,比如按钮,内容区的items,单选按钮等,只有多选按钮是用了另外一个监听
DialogInterface.OnMultiChoiceClickListener。
(1)单选按钮的监听
public void onClick(DialogInterface dialog, int which);
//which代表items,单选按钮中的序号
(2)多选按钮的监听
public void onClick(DialogInterface dialog, int which, boolean isChecked);
//which代表items,单选按钮中的序号
//isChecked代表当前点击的序号是否被勾选
(3)Adapter的监听
AlertDialog还支持ListAdapter的子类,我们可以传入各种ListAdapter的子类,来显示复杂的列表,当然直接使用 setView 也可以办到
public Builder setAdapter(final ListAdapter adapter, final
OnClickListener listener)
三.ProgressDialog进度对话框
ProgressDialog是AlertDialog类的子类,可以为一个未定义进度的任务显示一个旋转轮形状的进度动画,或者为一个指定进度的任务显示一个进度条。它的用处非常广泛,在每次用户操作一个延迟的任务时,我们都必须以进度对话框的形式告诉用户,否者用户并不知道操作已经开始,可能会多次操作同一个任务,并有可能导致异常发生。
(一)构造方法和常用方法
1.构造方法需要传入一个上下文
public ProgressDialog(Context context)
2.给定一个样式,带进度条和不带进度条的样式
public void setProgressStyle(int style) //可选值
//STYLE_SPINNER 默认 圆形,没有进度条的样式
//STYLE_HORIZONTAL 给定进度条的样式
8.ProgressDialog从AlertDialog中继承的常用方法setIcon和setTitile
9.虽然ProgressDialog可以设置Button,但是我们一般都不会去使用它
(二)进度对话框的设计的使用
1.圆形进度条对话框
// 显示圆形的进度框
public void bt1(View v) {
// 创建进度条的对话框
ProgressDialog dialog = new ProgressDialog(this);
// 设置进度条的样式,选择圆形或条状
// 这里这圆形的
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// 设置标题
dialog.setTitle(“文件下载”);
// 设置文本信息
dialog.setMessage(“正在下载。。。”);
// 设置是否能用后退键出对话框
// 选择false就代表不能
// 如果设置为false,程序可能退出不了
dialog.setCancelable(true);
// 显示对话框
dialog.show();
}
程序运行后的结果:

这里点击进度对话框的其他地方,对话框就消失了。因为默认情况,对话框失去焦点就会消失。
2.条形对话框
// 显示设置水平的进度框
public void bt2(View v) {
// 创建进度条的对话框
final ProgressDialog dialog = new ProgressDialog(this);
// 设置进度条的样式,选择圆形或条状
// 这里这圆形的
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 设置标题
dialog.setTitle(“文件下载”);
// 设置文本信息
dialog.setMessage(“正在下载。。。”);
// 设置是否能用后退键出对话框
// 选择false就代表不能
// 如果设置为false,程序可能退出不了
dialog.setCancelable(false);
// 显示对话框
dialog.show();
// 这里新建一个线程来,跟新进度和关闭页面 new Thread(new Runnable() { @Override public void run() { // 获取进度值的当前的值 int index = 0; // 跟新进度 while (index < dialog.getMax()) { index++; try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } // 设置进度的值 dialog.setProgress(index); } // 完成任务后,退出对话框 dialog.cancel(); } }).start(); }
运行结果:

四.时间和日期选择器对话框
(一)时间和日期对话框的方法
DatePickerDialog与TimePickerDialog都继承于AlertDialog,基本方法和我们前面讲的DatePicker和TimePicker组件一样,只是需要调用Dialog的show方法来显示。在构造方法里需要传入回调监听
1.用户改变时间后的监听
public interface OnTimeChangedListener { void onTimeChanged(TimePicker view, int hourOfDay, int minute);
}
2.用户改变日期后的监听
public interface OnDateChangedListener { void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth);
}
(二)时间对话框的使用
// 显示时间的对话框
public void btn1(View v) {
// 第一个参数是上下文
// 第二个参数是监听时间选择后的事件
// 后面两个数是默认是时间
// 后一个是代表是否显示时间的格式是24小时制的
TimePickerDialog dialog = new TimePickerDialog(this,
new OnTimeSetListener() {
讯享网 @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Toast.makeText(MainActivity.this, hourOfDay + "时" + minute + "分", 0).show(); } }, 21, 8, true);
//显示标题
dialog.setTitle(“选择你要设定的时间”);
// 显示时间的对话框
dialog.show();
}
运行后显示的结果:

这是时间对话框的选择按钮,其中也可以设置很多属性。
这里点击完成后会弹出一个选择的时间的土司。
如图所示:

(三)日期对话框的使用
// 显示日期的对话框
public void btn2(View v) {
// 第一个参数是上下文
// 第二个参数是监听时间选择后的事件
// 后面三个数是默认是日期数
DatePickerDialog dialog = new DatePickerDialog(this,
new OnDateSetListener() {
// 日期选择器上的月份是从0开始的
讯享网 @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { Toast.makeText( MainActivity.this, year + "年" + (monthOfYear + 1) + "月" + dayOfMonth + "日", 0).show(); } }, 2016, 11, 13); // 显示时间的对话框 dialog.show(); }
点击运行后,显示结果:

————————————————
版权声明:本文为CSDN博主「峥嵘life」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wenzhi/article/details/
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/28124.html