Android学习笔记二十八之AlertDialog提示对话框和几个常用的提示框
程序员文章站
2022-05-16 18:20:52
...
Android学习笔记二十八之AlertDialog提示对话框和ProgressDialog进度条提示框
在我们实际开发中,常常需要有对话框弹出跟用户交互。AndroidOS提供有多种对话框,这一节,我们介绍一下AlertDialog和几个常用Dialog,AlertDialog是ProgressDialog的父类,构造器是protected的,所以不能直接new出来这个对象,需要用到AlertDialog.Builder中的create()方法。下面介绍一下创建AlertDialog需要了解的几个方法:
- setTitle:为对话框设置标题
- setIcon :为对话框设置图标
- setMessage:为对话框设置内容
- setView : 给对话框设置自定义样式
- setItems :设置对话框要显示的一个list,一般用于显示几个命令时
- setMultiChoiceItems :用来设置对话框显示一系列的复选框
- setSingleChoiceItems:用来设置对话框的单选列表
- setNeutralButton :普通按钮
- setPositiveButton :给对话框添加”Yes”按钮
- setNegativeButton :对话框添加”No”按钮
- create : 创建对话框,必须要调用
- show :显示对话框,必须要调用
下面我们通过例子体会AlertDialog的几种常用情况:
第一种、普通的对话框
创建一个普通的对话框,比如给用户选择是否退出程序等的时候,例子代码如下:
AlertDialog.Builder builder = new AlertDialog.Builder(AlertDialogActivity.this);
builder.setTitle("提示");
builder.setMessage("你是否要退出应用?");
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ToastUtils.showToast(AlertDialogActivity.this, "你点击了取消按钮");
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ToastUtils.showToast(AlertDialogActivity.this, "你点击了确定按钮");
}
});
builder.create().show();
第二种、带列表的普通对话框
例子代码如下:
final String[] cars = {"宝马", "奔驰", "马自达", "卡罗拉", "本田", "丰田", "长安", "红旗"};
final AlertDialog.Builder builder = new AlertDialog.Builder(AlertDialogActivity.this);
builder.setTitle("选择你喜欢的车");
builder.setItems(cars, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ToastUtils.showToast(AlertDialogActivity.this, "你选了:" + cars[i]);
}
});
builder.create().show();
第三种、带单选列表的对话框
例子代码如下:
final String[] language = {"Java语言", "PHP语言", "Android语言", "IOS语言", "C++语言", "C#语言"};
final String[] select = {""};
AlertDialog.Builder builder = new AlertDialog.Builder(AlertDialogActivity.this);
builder.setTitle("选择你喜欢的语言,只能选一项");
builder.setSingleChoiceItems(language, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
select[0] = language[i];
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ToastUtils.showToast(AlertDialogActivity.this, "你选了:" + select[0]);
}
});
builder.create().show();
第四种、带多选列表的对话框
例子代码如下:
final String[] menu = {"丝瓜面筋", "糖醋鲤鱼", "糖醋排骨", "剁椒鱼头", "清蒸咸鱼", "鱼香肉丝", "清炒上海青", "麻婆豆腐"};
final boolean[] isCheck = {false, false, false, false, false, false, false, false};
AlertDialog.Builder builder = new AlertDialog.Builder(AlertDialogActivity.this);
builder.setTitle("请选择你的想要的菜");
builder.setMultiChoiceItems(menu, isCheck, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
isCheck[i] = b;
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String select = "";
for (int j = 0; j < isCheck.length; j++) {
if (isCheck[j]) {
select += menu[j];
}
}
ToastUtils.showToast(AlertDialogActivity.this, "你选择的菜有:" + select);
}
});
builder.create();
builder.show();
最后实现效果如下:
这里只是简单的实现,先是new一个AlertDialog.Builder,然后设置一些相应的内容,最后调用create方法创建,调用show方法显示出来。对于AlertDialog的介绍就到这里了,也可以自定义AlertDialog,这个留到后面讲自定义控件的时候再细讲。下面我们介绍一下ProgressDialog。
ProgressDialog进度提示框
AndroidOS提供给我们创建进度条对话框有两种方式,一种是直接new,另外一种是调用静态方法show。下面,我们通过例子体会一下ProgressDialog。
创建一个圆形进度条
//通过show方法创建一个进度条对话框
ProgressDialog.show(ProgressDialogActivity.this, "通讯中", "正在通讯,请稍候...", false, true);
创建一个长方形进度条
//通过new方法创建一个对话框
progressDialog = new ProgressDialog(ProgressDialogActivity.this);
//设置进度条的最大值
progressDialog.setMax(maxProgress);
//设置标题
progressDialog.setTitle("正在下载");
//设置提示信息内容
progressDialog.setMessage("安装包正在下载,马上就好...");
//设置是否允许点击进度条对话框外面取消对话框
progressDialog.setCancelable(false);
//设置进度条的样式,这个为长方形
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//设置是否显示进度,false显示
progressDialog.setIndeterminate(false);
//将进度条对话框show出来
progressDialog.show();
//新建一个线程更新进度
new Thread(new Runnable() {
@Override
public void run() {
while (progress < maxProgress) {
//模拟耗时方法
sleep();
progress += 2;
handler.sendEmptyMessage(111);
}
}
}).start();
效果图:
这样可以实现一个ProgressDialog进度条对话框,在这里知识简单实现,我们也可以按照需求自定义进度条对话框。
DatePickerDialog日期选择提示框
这个和TimePickerDiaog都比较简单,直接放代码示例,就不在解析了,代码如下:
Calendar calendar = Calendar.getInstance();
//第一个参数是上下文对象,第二个是监听器,第三个是设置当前年份,第四个是设置月份,第五个是设置当前日份
new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
String result = "你选择的是:" + i + "年" + (i1 + 1) + "月" + i2 + "日";
ToastUtils.showToast(MainActivity.this, result);
}
}, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();
TimePickerDialog时间选择提示框
Calendar calendar = Calendar.getInstance();
//第一个参数是上下文对象,第二个是监听器,第三个是设置当前小时数,第四个是分钟数,第五个是是否显示24小时制
new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int i, int i1) {
String result = "你选择的是:" + i + "时" + i1 + "分";
ToastUtils.showToast(MainActivity.this, result);
}
}, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true).show();
最后实现效果图:
最后附上国内镜像API