文章目录
- 前言
- 一、AlertDialog用法
- 1.使用步骤
- 2.AlertDialog.Builder对象的常用属性讲解
- 二、AlertDialog实例代码
- 提醒消息对话框
- 提问对话框
- 普通列表对话框
- 多选列表对话框
- 自定义布局对话框
- 三、ProgressDialog进度条对话框
- 使用方法
- ProgressDialog属性
- 实例代码
- 四、日期时间选择对话框
- 日期选择对话框
- 时间选择对话框
- 选择日期范围实例代码
前言
代码直接复制粘贴使用
一、AlertDialog用法
1.使用步骤
1.创建一个对话框生成器AlertDialog.Builder对象
2.设置AlertDialog.Builder对象的属性,图标,标题,内容等
3.调用create()方法创建一个对话框AlertDialog
4.调用AlertDialog的show()方法显示对话框
5.调用AlertDialog的dismiss()方法关闭对话框
2.AlertDialog.Builder对象的常用属性讲解
1.设置对话框的图标
setIcon(R.mipmap.ic_launcher)
2.设置对话框标题
setTitle("系统警告")
3.设置对话框内容
setMessage("电量过低,一分钟后将自动关机!")
4.设置点击对话框外的区域是否关闭对话框
setCancelable(false)
5.设置对话框按钮功能(系统提供的对话框有三个按钮。不设置则不显示,点击按钮后对话框会自动关闭)
第一个参数为按钮上显示的文字,第二个参数为按钮监听器
setNegativeButton("否", new DialogInterface.OnClickListener() {...}) setNeutralButton("中", new DialogInterface.OnClickListener() {...}) setPositiveButton("是", new DialogInterface.OnClickListener() {...})
6.设置单选列表对话框
第一个参数为数组选项列表,第二个参数为选项监听器
setItems( new String[]{"A", "B", "C", "D", "E"}, new DialogInterface.OnClickListener() {...})
7.设置多选列表对话框
第一个参数为数组选项列表,第二个参数为选项的默认选中状态,第三个参数为选项监听器
setMultiChoiceItems(new String[]{"A", "B", "C", "D", "E"}, new boolean[]{false, false, false, false, false}, new DialogInterface.OnMultiChoiceClickListener() {...})
8.自定义对话框
参数为自定义布局
setView(view)
二、AlertDialog实例代码
提醒消息对话框
设置一个中性按钮即可,点击关闭对话框,还要设置点击对话框以外的区域关闭对话框
public void alertDialog1() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.mipmap.ic_launcher) .setTitle("系统提示") .setMessage("电量过低,请尽快充电!") .setCancelable(true) .setNeutralButton("好的", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "你点击了好的", Toast.LENGTH_SHORT).show(); } }).create().show(); }
提问对话框
设置是和否两个按钮,设置点击对话框以外的区域不关闭对话框
public void alertDialog2() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.mipmap.ic_launcher) .setTitle("系统提示") .setMessage("您确定要退出吗?") .setCancelable(false) .setNegativeButton("否", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "你点击了否", Toast.LENGTH_SHORT).show(); } }) .setPositiveButton("是", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "你点击了是", Toast.LENGTH_SHORT).show(); } }).create().show(); }
普通列表对话框
不用设置按钮,点击对应的选项后会自动关闭对话框
防止意外关闭选项框,所以设置以下点击对话框以外的区域不关闭对话框
public void alertDialog3() { AlertDialog.Builder builder = new AlertDialog.Builder(this); String[] array = new String[]{"A", "B", "C", "D", "E"}; builder.setIcon(R.mipmap.ic_launcher) .setTitle("单选题,请选择正确的答案!") .setCancelable(false) .setItems(array, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "你选择了" + array[which], Toast.LENGTH_SHORT).show(); } }).create().show(); }
多选列表对话框
需要监听选项,添加两个按钮,一个确定按钮,一个中性按钮,同样设置一下点击对话框以外的区域不关闭对话框
public void alertDialog4() { AlertDialog.Builder builder = new AlertDialog.Builder(this); final String[] fruits = new String[]{"A", "B", "C", "D", "E"}; boolean[] checkItems = new boolean[]{false, false, false, false, false}; builder.setIcon(R.mipmap.ic_launcher) .setTitle("多选题,请选择正确的答案!") .setCancelable(false) .setMultiChoiceItems(fruits, checkItems, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { checkItems[which] = isChecked; } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String res = ""; for (int i = 0; i < checkItems.length; i++) { if (checkItems[i]) res += fruits[i] + " "; } Toast.makeText(MainActivity.this, "你选择了:" + res, Toast.LENGTH_SHORT).show(); } }) .setNeutralButton("关闭", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "你点击了关闭", Toast.LENGTH_SHORT).show(); } }).create().show(); }
自定义布局对话框
效果图:
首先创建一个布局文件lyout.xml文件
然后在java代码中添加到AlertDialog中
public void alertDialog5() { View view = MainActivity.this.getLayoutInflater().inflate(R.layout.layout, null,false); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setCancelable(false) .setView(view); AlertDialog alert = builder.create(); alert.show(); view.findViewById(R.id.btn_cancle).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "你点击了右上角的X", Toast.LENGTH_SHORT).show(); alert.dismiss(); } }); view.findViewById(R.id.btn_yes).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "你点击了是", Toast.LENGTH_SHORT).show(); alert.dismiss(); } }); view.findViewById(R.id.btn_no).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "你点击了否", Toast.LENGTH_SHORT).show(); alert.dismiss(); } }); }
三、ProgressDialog进度条对话框
使用方法
1.创建ProgressDialog对象
2.设置ProgressDialog对象的属性
3.调用ProgressDialog对象的show方法显示对话框
4.调用ProgressDialog对象的dismiss方法关闭对话框
ProgressDialog属性
AlertDialog.Builder对象的属性ProgressDialog都可以用,就不再赘述,重点是ProgressDialog新增的属性
1.setIndeterminate(true)
设置进度条是否显示进度,true为不显示进度,进度条会显示为无限动画,适用于应用安装等待的场景,false为显示进度,根据具体进度值显示
2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
设置进度条样式,STYLE_SPINNER为圆形,STYLE_HORIZONTAL为横线形,没有设置这个属性的时候默认为圆形
这个属性为圆形或者未设置这个属性时,设置setIndeterminate属性是无效的,因为系统提供的圆形进度条无法显示进度
3.setProgress(20);
设置进度条当前进度,总进度值为100
实例代码
代码讲解:
Handler用来更新进度条显示
TimerTask用来模拟应用下载并实时返回下载进度,每秒更新一次进度值,当进度达到100后,将进度条修改为不显示进度值的无限动画模拟应用安装,2秒后安装完成自动关闭对话框
MainActivity.java
public class MainActivity extends AppCompatActivity { private ProgressDialog pgDialog; private int gres = 0; Handler myHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 111) { pgDialog.setProgress(gres); } if (msg.what == 222) { pgDialog.setTitle("正在安装中"); pgDialog.setMessage("正在安装中,请稍后..."); pgDialog.setIndeterminate(true); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); alertDialog7(); } public void alertDialog7() { pgDialog = new ProgressDialog(this); pgDialog.setIcon(R.mipmap.ic_launcher); pgDialog.setTitle("正在下载"); pgDialog.setMessage("正在下载,请稍后..."); pgDialog.setCancelable(true); pgDialog.setIndeterminate(false); pgDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pgDialog.show(); //执行事务,每秒钟返回一次事务执行进度 new Timer().schedule(new TimerTask() { @Override public void run() { gres = gres + 10; myHandler.sendEmptyMessage(111); if (gres >= 100) { myHandler.sendEmptyMessage(222); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } pgDialog.dismiss(); cancel(); } } }, 0, 1000); } }
四、日期时间选择对话框
日期选择对话框
重点:
DatePickerDialog(日期选择对话框)的setOnDateSetListener方法,监听选择的日期
基本用法实例:
创建DatePickerDialog对象时携带参数,参数依次为(上下文,OnDateSetListener()监听器,年,月,日 )
弹出的日期选择框中默认为参数中的年月日
需要注意的是月份一定要+1才是正确的
public void createDialog2(){DatePickerDialog dpDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {@Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { String result = "你选择的是"+year+"年"+(month+1)+"月"+dayOfMonth+"日"; Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show(); } },2012,8,12); dpDialog.show(); }
时间选择对话框
重点:
TimePickerDialog(时间选择对话框)的setOnTimeSetListener方法,监听选择的时间
基本用法实例:
创建TimePickerDialog对象时携带参数,参数依次为(上下文,OnTimeSetListener监听器;小时,分钟,是否采用24小时制)
弹出的日期选择框中默认为参数中的小时分钟
public void createDialog3(){ TimePickerDialog dpDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { String result = "你选择的是"+hourOfDay+"时"+(minute+1)+"分"; Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show(); } },16,45,true); dpDialog.show(); }
选择日期范围实例代码
public class MainActivity4 extends AppCompatActivity { DatePickerDialog dpDialog; DatePickerDialog dpDialog2; int start_year; int start_month; int start_day; String result = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main4); createDialog4(); } public void createDialog4() { Calendar cale = Calendar.getInstance(); dpDialog = new DatePickerDialog(MainActivity4.this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { start_year = year; start_month = month + 1; start_day = dayOfMonth; dpDialog2 = new DatePickerDialog(MainActivity4.this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { result = "你选择的日期范围为" + start_year + "年" + start_month + "月" + start_day + "日" + " - " + year + "年" + (month + 1) + "月" + dayOfMonth + "日"; Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show(); } }, start_year, start_month, start_day + 7); //设置终止日志选择框默认日期为起始日期+7天 dpDialog2.setMessage("请选择终止日期"); dpDialog2.show(); } }, cale.get(Calendar.YEAR), cale.get(Calendar.MONTH), cale.get(Calendar.DAY_OF_MONTH)); //设置起始日期选择框默认日期为今天 dpDialog.setMessage("请选择起始日期"); dpDialog.show(); } }