引言

开发中,我们会有很多地方使用 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中str数据类型的内置常用方法(函数)总结

    str基本数据类型常用功能 center(self,width,fllchar=none)                        内容居中,width表示总长度,fllchar表示空白处默认为 ...

  2. Facebook的早期历史

    Facemash:谁更有吸引力?Facebook的起源   2003年,当时扎克伯格还是一名哈佛大学的二年级学生,他编写了一个名为Facemash的网站.他利用黑客技术入侵了学校管理部门的网站,并从中 ...

  3. Web API Media Type Formatter

    public static void Register(HttpConfiguration config) { // Web API configuration and services // Web ...

  4. jmeter+ant生成xml报告

    1.jdk安装 2.jmter安装 3.ant安装 下载apache-ant-1.10.6-bin.zip,直接解压就可使用,和jmeter类似 ant环境变量配置 新建系统变量:ANT_HOME,变 ...

  5. 启xin宝app的token算法破解——token分析篇(三)

    前两篇文章分析该APP的抓包.的逆向: 启xin宝app的token算法破解--抓包分析篇(一) 启xin宝app的token算法破解--逆向篇(二) 本篇就将对token静态分析,其实很简单就可以搞 ...

  6. 【阿里云IoT+YF3300】3. Alink物模型之属性上传和下发

    [名词解释]属性:设备的功能模型之一,一般用于描述设备运行时的状态,如环境监测设备所读取的当前环境温度等.属性支持 GET 和 SET 请求方式.应用系统可发起对属性的读取和设置请求. 在上一篇文章& ...

  7. Oracle笔记_多表查询

    1 执行sql文件 @文件地址名 --执行某个sql文件: 2 多表查询 想要的数据不在同一张表,就需要多个表进行联查. 多表查询也叫做表连接查询,其中的where条件就是连接条件. 可以使用join ...

  8. AntV F2+vue-cli构建移动端可视化视图

    AntV F2是蚂蚁金服旗下的一个专注于移动,开箱即用的可视化解决方案,完美支持 H5 环境同时兼容多种环境(Node, 小程序,Weex), 完备的图形语法理论,满足你的各种可视化需求,专业的移动设 ...

  9. Linux的权限属性信息1到10位分别什么意思

    要设置权限,就需要知道文件的一些基本属性和权限的分配规则. 在Linux中,ls命令常用来查看文件的属性,用于显示文件的文件名和相关属性. #ls -l 路径          [ls -l  等价于 ...

  10. 一 安装docker(详解)

    一.安装docker 1 Docker 要求 CentOS 系统的内核版本高于 3.10 执行命令:uname -r 2 添加yum源: yum-config-manager --add-repo h ...