Android开发中常用Dialog(普通弹窗&时间选择器&日历选择器)
引言
开发中,我们会有很多地方使用 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(已知子类)
AlertDialog, CharacterPickerDialog, MediaRouteChooserDialog, MediaRouteControllerDialog, Presentation
- 开发中,与:进度、时间、日历 有关的Dialog,继承于AlertDialog。源码文档如下述:
- Known Direct Subclasses(已知子类)
既然明确了继承关系,那么我们就来用代码演示下开发中最基本的使用方式(此处只做一些基本的使用演示,更高级的使用后续再和大家共同学习~)
普通的对话框
代码演示
//创建一个 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(普通弹窗&时间选择器&日历选择器)的更多相关文章
- Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令
Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...
- Android开发中常用的库总结(持续更新)
这篇文章用来收集Android开发中常用的库,都是实际使用过的.持续更新... 1.消息提示的小红点 微信,微博消息提示的小红点. 开源库地址:https://github.com/stefanjau ...
- Android开发中常用的ListView列表的优化方式ViewHolder
在Android开发中难免会遇到大量的数据加载到ListView中进行显示, 然后其中最重要的数据传递桥梁Adapter适配器是常用的,随着市场的需 求变化ListView'条目中的内容是越来越多这就 ...
- Android开发中常用的设计模式
首先需要说明的是,这篇博文灵感来自于 http://www.cnblogs.com/qianxudetianxia/archive/2011/07/29/2121547.html ,在这里,博主已经很 ...
- NO.4 Android开发中常用框架及工具
android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新ListView.ViewPager.WevView.ExpandableListView.GridView ...
- Android 开发中常用小技巧
TextView中的getTextSize返回值是以像素(px)为单位的, 而setTextSize()是以sp为单位的. 所以如果直接用返回的值来设置会出错,解决办法是 用setTextSize() ...
- Android 开发中常用 ADB 命令总结
adb 的全称为 Android Debug Bridge,就是起到调试桥的作用.通过 adb 我们可以在 Eclipse 中方便通过 DDMS 来调试 Android 程序,说白了就是 debug ...
- android开发中常用的快捷键
Eclipse快捷键-方便查找,呵呵,记性不好 行注释/销注释 Ctrl+/ 块注释/销注释/XML注释 Ctrl+Shift+/ Ctrl+Shift+\查找 查找替换 Ctrl+H Ctr ...
- Android开发中常用的一些小技巧(转载)
http://www.jb51.net/article/61135.htm Activity.startActivities() 常用于在应用程序中间启动其他的Activity. TextUtils. ...
随机推荐
- 程序员过关斩将--cookie和session的关系其实很简单
月高风下,下班路上.... 菜菜哥,告诉你一个秘密,但是不允许告诉任何人 这么秘密,你有男票了?~ 不是,昨天我偷偷去面试了,结果挂了 这不是好事吗,上天让公司留住你..... 好吧,不过还是要请教你 ...
- 基于python的mysql复制工具
一简介 python-mysql-replication 是由python实现的 MySQL复制协议工具,我们可以用它来解析binlog 获取日志的insert,update,delete等事件 ,并 ...
- Java集合框架之Set接口浅析
Java集合框架之Set接口浅析 一.java.util.Set接口综述: 这里只对Set接口做一简单综述,其具体实现类的分析,朋友们可关注我后续的博文 1.1Set接口简介 java.util.se ...
- 海量数据搜索---demo展示百度、谷歌搜索引擎的实现
在我们平常的生活工作中,百度.谷歌这些搜索网站已经成为了我们受教解惑的学校,俗话说得好,“有问题找度娘”.那么百度是如何在海量数据中找到自己需要的数据呢?为什么它搜索的速度如此之快?我们都知道是因为百 ...
- Eclipse Paho MQTT Utility
下载地址: https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho. ...
- Python 基础(五)
pandas缺失值处理 import pandas as pd importrandom df01 = pd.DataFrame(np.random.randint(1,9),size = (4,4) ...
- IT项目管理入门知识
- CodeForces 402 E Strictly Positive Matrix
Strictly Positive Matrix 题解: 如果原来的 a[i][j] = 0, 现要 a[i][j] = 1, 那么等于 sum{a[i][k] + a[k][j]} > 1. ...
- 牛客OI测试赛 F 子序列 组合数学 欧拉降幂公式模板
链接:https://www.nowcoder.com/acm/contest/181/F来源:牛客网 题目描述 给出一个长度为n的序列,你需要计算出所有长度为k的子序列中,除最大最小数之外所有数的乘 ...
- Treasure Hunt CodeForces - 979B
After the big birthday party, Katie still wanted Shiro to have some more fun. Later, she came up wit ...