引言

开发中,我们会有很多地方使用 Dialog 来展示一些提示信息或设置信息。如:用户提示、进度展示、时间设置、日期设置等。

下面我和大家一些学习下Android中常用的几种Dialog吧~


首先,先介绍下 Dialog 中那些类的关系

先来一波源码

public interface DialogInterface {
......
}
public class Dialog implements DialogInterface
......
public class AlertDialog extends Dialog implements DialogInterface {
......
}
public class ProgressDialog extends AlertDialog {
......
}
public class TimePickerDialog extends AlertDialog implements OnClickListener, OnTimeChangedListener {
......
}
public class DatePickerDialog extends AlertDialog implements OnClickListener, OnDateChangedListener {
......
}

从上述代码中,我们可以看出:

  • Dialog 类 是一个基类。且源码文档中也给出了说明:
  • Known Direct Subclasses(已知子类)

AlertDialogCharacterPickerDialogMediaRouteChooserDialogMediaRouteControllerDialogPresentation

  • 开发中,与:进度、时间、日历 有关的Dialog,继承于AlertDialog。源码文档如下述:
  • Known Direct Subclasses(已知子类)

DatePickerDialogProgressDialogTimePickerDialog


既然明确了继承关系,那么我们就来用代码演示下开发中最基本的使用方式(此处只做一些基本的使用演示,更高级的使用后续再和大家共同学习~)

普通的对话框

代码演示

        //创建一个 AlertDialog.Builder 对象
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//给对话框添加title
builder.setTitle("普通对话框");
//给对话框添加内容
builder.setMessage("这是一个内容");
//给对话框添加点击事件
builder.setNeutralButton("未知", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.e("对话框", "未知 which = " + which);
}
}); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.e("对话框", "取消 which = " + which);
}
}); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.e("对话框", "确定 which = " + which);
}
});
//切记勿忘~开启dialog
builder.show();

效果图(机型不同,展示可能稍有差异,也可以自定义样式)


带单选的对话框

代码演示

        //给 AlertDialog 设置单选(四种参数形式)
//Builder setSingleChoiceItems(@ArrayRes int itemsId, int checkedItem, final OnClickListener listener)
//Builder setSingleChoiceItems(Cursor cursor, int checkedItem, String labelColumn, final OnClickListener listener)
//Builder setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener listener)
//setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener)
//参数1:所有选项。参数2:默认一个选择。参数3:点击事件监听
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("单选对话框");
String[] items = new String[]{"男", "女", "都不是"};
builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
@Override //which:点击位置
public void onClick(DialogInterface dialog, int which) {
Log.e("对话框", "which = " + which);
}
});
builder.show();

效果图(机型不同,展示可能稍有差异,也可以自定义样式)


带多选的对话框

代码演示

        //给 AlertDialog 设置多选(三种参数形式)
//Builder setMultiChoiceItems(@ArrayRes int itemsId, boolean[] checkedItems, final OnMultiChoiceClickListener listener)
//Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn, final OnMultiChoiceClickListener listener)
//Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, final OnMultiChoiceClickListener listener)
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("多选对话框");
String[] items = new String[]{"西瓜", "葡萄", "香蕉", "苹果", "都要"};
boolean[] checks = new boolean[]{true, false, false, false, false};
builder.setMultiChoiceItems(items, checks, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
Log.e("对话框", "which = " + which + ", isChecked = " + isChecked);
}
});
builder.show();

效果图(机型不同,展示可能稍有差异,也可以自定义样式)


带进度条的对话框

代码演示

        final ProgressDialog progress = new ProgressDialog(this);
progress.setTitle("进度条对话框");
//设置进度条样式(可更改,推荐看源码)
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//设置一个最大进度值
progress.setMax(100);
//开启一个线程模拟进度
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
SystemClock.sleep(100);
progress.setProgress(i);
}
}
}).start();
progress.show();

效果图(机型不同,展示可能稍有差异,也可以自定义样式)


时间选择对话框

代码演示

        //TimePickerDialog(Context context, OnTimeSetListener listener, int hourOfDay, int minute, boolean is24HourView)
//TimePickerDialog(Context context, int themeResId, OnTimeSetListener listener, int hourOfDay, int minute, boolean is24HourView)
//themeResId:the resource ID of the theme to apply to this dialog
TimePickerDialog timePicker = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Log.e("对话框", "hourOfDay = " + hourOfDay + ", minute = " + minute);
}
}, 0, 0, true);
timePicker.show();

效果图(机型不同,展示可能稍有差异,也可以自定义样式)


日历选择对话框

代码演示

        //DatePickerDialog要求Android-API最低版本是24
//DatePickerDialog(Context context)
//DatePickerDialog(Context context, int themeResId)
//DatePickerDialog(Context context, OnDateSetListener listener, int year, int month, int dayOfMonth)
//DatePickerDialog(Context context, int themeResId, OnDateSetListener listener, int year, int monthOfYear, int dayOfMonth)
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
DatePickerDialog datePicker = new DatePickerDialog(this);
//当我们创建对象的时候,底层源码调用的都是下述的私有构造器
//this(context, 0, null, Calendar.getInstance(), -1, -1, -1)
// private DatePickerDialog(Context context,
// int themeResId, //自定义样式
// OnDateSetListener listener, //监听
// Calendar calendar, //日历类
// int year, //指定年
// int monthOfYear, //指定月
// int dayOfMonth) //指定日
datePicker.show();
}

效果图(机型不同,展示可能稍有差异,也可以自定义样式)



PS::期待与大家更多的交流~让我们共同进步。技术正在改变着世界!

Android开发中常用Dialog(普通弹窗&时间选择器&日历选择器)的更多相关文章

  1. Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令

    Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...

  2. Android开发中常用的库总结(持续更新)

    这篇文章用来收集Android开发中常用的库,都是实际使用过的.持续更新... 1.消息提示的小红点 微信,微博消息提示的小红点. 开源库地址:https://github.com/stefanjau ...

  3. Android开发中常用的ListView列表的优化方式ViewHolder

    在Android开发中难免会遇到大量的数据加载到ListView中进行显示, 然后其中最重要的数据传递桥梁Adapter适配器是常用的,随着市场的需 求变化ListView'条目中的内容是越来越多这就 ...

  4. Android开发中常用的设计模式

    首先需要说明的是,这篇博文灵感来自于 http://www.cnblogs.com/qianxudetianxia/archive/2011/07/29/2121547.html ,在这里,博主已经很 ...

  5. NO.4 Android开发中常用框架及工具

    android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新ListView.ViewPager.WevView.ExpandableListView.GridView ...

  6. Android 开发中常用小技巧

    TextView中的getTextSize返回值是以像素(px)为单位的, 而setTextSize()是以sp为单位的. 所以如果直接用返回的值来设置会出错,解决办法是 用setTextSize() ...

  7. Android 开发中常用 ADB 命令总结

    adb 的全称为 Android Debug Bridge,就是起到调试桥的作用.通过 adb 我们可以在 Eclipse 中方便通过 DDMS 来调试 Android 程序,说白了就是 debug ...

  8. android开发中常用的快捷键

    Eclipse快捷键-方便查找,呵呵,记性不好 行注释/销注释 Ctrl+/  块注释/销注释/XML注释 Ctrl+Shift+/   Ctrl+Shift+\查找 查找替换 Ctrl+H  Ctr ...

  9. Android开发中常用的一些小技巧(转载)

    http://www.jb51.net/article/61135.htm Activity.startActivities() 常用于在应用程序中间启动其他的Activity. TextUtils. ...

随机推荐

  1. Python模块之ncclient

    一.简介 此模块是是netconf协议的客户端,可与netconf服务端进行交互 二.实验环境 1.操作系统:win10 2.python版本:python3.6.6 3.ncclient模块版本:0 ...

  2. spring-boot-plus更新日志 CHANGELOG(九)

    spring-boot-plus更新日志 CHANGELOG [V1.2.0-RELEASE] 2019.08.06

  3. nginx单机1w并发优化

    目录 ab工具 整体优化思路 具体的优化思路 编写脚本完成并发优化配置 性能统计工具 tips 总结 ab工具 ab -c 10000 -n 200000 http://localhost/index ...

  4. Django之静态文件,中间件,admin后台管理

    静态文件 静态文件的使用 在 网页使用的css文件,js文件和图片等叫做静态文件.1)在项目下新建静态文件夹 static. 2) 配置静态文件所在的物理目录.Settings.py STATIC_U ...

  5. UVA 10699 Count the factors 题解

    Time limit 3000 ms OS Linux Write a program, that computes the number of different prime factors in ...

  6. Jenkins教程——从安装到部署Docker服务(二)声明式流水线HelloWorld

    前言 本文通过一个声明式流水线的HelloWorld程序做一下流水线基础入门,对常用的流水线参数进行简要说明 什么是流水线 现实中的流水线 流水线比较好理解,类比于现实生活中的生产流水线,每个流程只做 ...

  7. FFmpeg-截取视频图片

    FFmpeg-截取视频图片 标签(空格分隔): linux 安装FFmpeg 官网:http://www.ffmpeg.org/ 这里主要是linux环境下的安装 1. wget http://ffm ...

  8. 第五章 Spring核心概念

     5.1.1 企业级应用开发    企业级应用是指那些为商业组织,大型企业而创建部署的解决方案及应用,大型企业级应用的结构复杂,涉及的外部资源众多,事务密集,数据规模大,用户数量多,有较强的安全性考虑 ...

  9. C#开发BIMFACE系列11 服务端API之源文件删除

    系列目录     [已更新最新开发文章,点击查看详细] 通过BIMFACE控制台或者调用服务接口上传文件成功后,如果不再需要该文件,则可以通过BIMFACE平台提供的“源文件删除”服务接口删除具体的文 ...

  10. set和push方法压入栈顶的值获取方法

    向值栈里面放数据(储存的位置在root域里面) 向值栈放数据有多种方式,往往我们只用其中一种 1.set方法压栈 1)在Action中获取值栈对象,使用set()方法向值栈存放数据 ActionCon ...