对话框相关概念:
Android API 支持下列类型的对话框对象:
(一)警告对话框 AlertDialog: 一个可以有0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以创建大多数的交互界面, 是推荐的类型.
(二)进度对话框 ProgressDialog: 显示一个进度环或者一个进度条. 由于它是AlertDialog的扩展, 所以它也支持按钮.
(三)日期选择对话框 DatePickerDialog: 让用户选择一个日期.
(四)时间选择对话框 TimePickerDialog: 让用户选择一个时间
Dialog的创建和使用:
在时间应用中的对话框基本不用Dialog而是用它的子类。
这里简单使用一下Dialog,代码如下:
// 普通的对话框,普通的对话框功能很少,除非重写类
public void bt1(View v) {
// 创建对话框对象
Dialog dialog = new Dialog(this);
// 创建对话框内容
dialog.setTitle("对话框的标题");
// 显示对话框
dialog.show();
}
运行后结果:
AlertDialog的创建和使用:
// 警告对话框,需要用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();
}
运行结果:
有输入框的对话框:
// 设置一个有输入文本的对话框---->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();
}
运行结果:
使用对话框内的控件控制对话框:
使用对话框中的按钮,来关闭对话框
// 使用对话框内的控件来关闭对话框
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();
}
});
}
运行结果:
圆形进度条对话框:
// 显示圆形的进度框
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();
}
运行结果:
条形进度条对话框
// 显示设置水平的进度框
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();
}
运行结果:
时间对话框:
// 显示时间的对话框
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();
}
运行结果: