【Android - 进阶】之Dialog分类及使用
1、确定取消对话框
代码:
// 使用AlertDialog.Builder初始化对话框
AlertDialog.Builder builder0 = new AlertDialog.Builder(context);
// 设置图标
builder0.setIcon(R.mipmap.ic_launcher);
// 设置标题
builder0.setTitle("确定取消对话框");
// 设置显示内容
builder0.setMessage("点击确定还是取消?");
// 确定按钮
builder0.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "您点击了确定!", Toast.LENGTH_SHORT).show();
}
});
// 中立按钮(常用作忽略)
builder0.setNeutralButton("忽略", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "您选择了忽略!", Toast.LENGTH_SHORT).show();
}
});
// 取消按钮
builder0.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "您点击了取消!", Toast.LENGTH_SHORT).show();
}
});
// 创建对话框并展示
builder0.create().show();
效果:
2、列表对话框
代码:
final String[] items = {"苹果", "桃子", "梨", "李子", "香蕉", "橘子"};
AlertDialog.Builder builder1 = new AlertDialog.Builder(context);
builder1.setIcon(R.mipmap.ic_launcher);
builder1.setTitle("选择你喜欢的水果");
// 注意:如果是列表形式的对话框,就不能有message
// 设置列表并绑定点击事件
builder1.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "你最喜欢的水果是" + items[which] + "!", Toast.LENGTH_SHORT).show();
}
});
builder1.create().show();
效果:
3、条形进度条对话框
代码:
private boolean isThreadInterrupted; // 标识进度条是否被隐藏,即线程是否被销毁
// 通过new的方式直接创建ProgressDialog
final ProgressDialog progressDialog2 = new ProgressDialog(context);
progressDialog2.setIcon(R.mipmap.ic_launcher);
progressDialog2.setTitle("正在下载文件......");
// 设置进度条的样式(这里是横向的进度条)
progressDialog2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 设置最大进度
progressDialog2.setMax(100);
// 当进度对话框正在加载数据的时候,如果点击对话框外围,不隐藏对话框
progressDialog2.setCanceledOnTouchOutside(false);
// 新建线程加载进度
final Thread loadThread = new Thread(new Runnable() {
@Override
public void run() {
int progress = 0;
while (++progress <= 100) {
if (!isThreadInterrupted) {
progressDialog2.incrementProgressBy(1);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
if (!isThreadInterrupted) {
// 进度加载完成后隐藏对话框,同时弹出Toast
context.runOnUiThread(new Runnable() {
@Override
public void run() {
progressDialog2.dismiss();
Toast.makeText(context, "文件下载完成!", Toast.LENGTH_SHORT).show();
}
});
} else {
// 重置,下次点击ListView的这个Item时可以重新开启线程下载
isThreadInterrupted = false;
}
}
});
loadThread.start();
// 设置一个按钮,第一个参数是指定这个按钮的作用(Positive/Negative/Neutual)
progressDialog2.setButton(ProgressDialog.BUTTON_NEGATIVE, "取消下载", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
// 点击取消下载按钮后阻塞下载线程
isThreadInterrupted = true;
}
});
// 显示对话框
progressDialog2.show();
效果:
4、圆形进度条对话框
代码:
// 如果不指定Dialog类的ProgressStyle,则默认显示一个圆形的进度框
final ProgressDialog progressDialog6 = new ProgressDialog(context);
progressDialog6.setMessage("正在加载......");
progressDialog6.setCanceledOnTouchOutside(false);
progressDialog6.show();
// 进度条三秒后消失,同时弹出Toast
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
context.runOnUiThread(new Runnable() {
@Override
public void run() {
progressDialog6.dismiss();
Toast.makeText(context, "加载完成!", Toast.LENGTH_SHORT).show();
}
});
}
}, 3000);
效果:
5、单选列表对话框
代码:
final String[] items = {"苹果", "桃子", "梨", "李子", "香蕉", "橘子"};
final AlertDialog.Builder builder3 = new AlertDialog.Builder(context);
builder3.setIcon(R.mipmap.ic_launcher);
builder3.setTitle("选择你喜欢的水果");
// 设置单选选项,默认选中第一个,并绑定点击事件
builder3.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "你最喜欢的水果是" + items[which] + "!", Toast.LENGTH_SHORT).show();
// 选中某一项后关闭对话框
dialog.dismiss();
}
});
builder3.create().show();
效果:
6、多选列表对话框
代码:
final String[] items = {"苹果", "桃子", "梨", "李子", "香蕉", "橘子"};
final boolean[] checkState = {false, false, false, false, false, false};
final AlertDialog.Builder builder4 = new AlertDialog.Builder(context);
builder4.setIcon(R.mipmap.ic_launcher);
builder4.setTitle("选择你喜欢的水果");
// 设置多选选项,并绑定点击事件
builder4.setMultiChoiceItems(items, new boolean[]{false, false, false, false, false, false},
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
checkState[which] = isChecked;
}
});
// 点击“确定”按钮后输出选中的选项
builder4.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String message = "";
boolean first = true;
for (int i = 0; i < items.length; i++) {
if (checkState[i]) {
if (first) {
message += items[i];
first = false;
} else {
message += "、" + items[i];
}
}
}
if ("".equals(message)) {
message = "看来您不喜欢吃水果";
}
Toast.makeText(context, "您喜欢的水果有:" + message, Toast.LENGTH_SHORT).show();
}
});
builder4.setNegativeButton("取消", null);
builder4.create().show();
效果:
7、日期选择对话框
代码:
// 获取当前的年月日
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
// 创建DatePickerDialog
DatePickerDialog datePickerDialog = new DatePickerDialog(context, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
// 得到的月份会比实际月份少1
Toast.makeText(context, year + "-" + (month + 1) + "-" + dayOfMonth, Toast.LENGTH_SHORT).show();
}
}, year, month, dayOfMonth);
// 显示对话框
datePickerDialog.show();
效果:
8、事件选择对话框
代码:
// 获取当前时间(时、分)
Calendar calendar = Calendar.getInstance();
int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
// 初始化TimePickerDialoy,最后一个参数决定是否是24小时制
TimePickerDialog timePickerDialog = new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Toast.makeText(context, hourOfDay + ":" + minute, Toast.LENGTH_SHORT).show();
}
}, hourOfDay, minute, true);
// 显示对话框
timePickerDialog.show();
效果:
9、自定义对话框
代码:
final AlertDialog.Builder builder5 = new AlertDialog.Builder(context);
builder5.setIcon(R.mipmap.ic_launcher);
builder5.setTitle("自定义对话框");
// 使用LayoutInflater创建一个自定义布局
View customView = LayoutInflater.from(context).inflate(R.layout.dialog_custom, null);
final TextView tvName = (TextView) customView.findViewById(R.id.id_customdialog_username);
final TextView tvPassword = (TextView) customView.findViewById(R.id.id_customdialog_password);
// 为对话框设置自定义布局
builder5.setView(customView);
builder5.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String username = tvName.getEditableText().toString().trim();
String password = tvPassword.getEditableText().toString().trim();
Toast.makeText(context, "您的用户名是" + username + ",密码是" + password, Toast.LENGTH_SHORT).show();
}
});
builder5.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder5.create().show();
自定义对话框的布局dialog_custom.xml中的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="15.0dip"
android:paddingLeft="20.0dip"
android:paddingRight="20.0dip"
android:paddingTop="10.0dip"> <EditText
android:id="@+id/id_customdialog_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Input your name"
android:inputType="text" /> <EditText
android:id="@+id/id_customdialog_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Input your password"
android:inputType="textPassword" /> </LinearLayout>
效果:
【Android - 进阶】之Dialog分类及使用的更多相关文章
- Android Dialogs(1)Dialog简介及Dialog分类
Dialogs A dialog is a small window that prompts the user to make a decision or enter additional info ...
- 我的Android进阶之旅------>经典的大牛博客推荐(排名不分先后)!!
本文来自:http://blog.csdn.net/ouyang_peng/article/details/11358405 今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下 谦虚的天下 柳志超 ...
- Android进阶推荐书籍
中级进阶推荐看一下以下这几本书 1.<Android从入门到精通(附光盘)> 明日科技 编 2.<第一行代码2 Android(第二版)> 郭霖 著 3.<Android ...
- Android进阶——深入浅出Handler(一)
Android进阶--深入浅出Handler(一) 在学习Handler之前,首先要学习一些基本概念,这将对之后的学习有所帮助. 主线程:Main Thread,又叫UI线程(UI Thread).A ...
- [置顶]
曙光到来,我的新书《Android进阶之光》已出版
独立博客版本请点击这里 由来 2016年我开始建立了自己的知识体系,所有的文章都是围绕着这个体系来写,随着这个体系的慢慢成长,开始有很多出版社联系我写书,因为比较看好电子工业出版社,就顺理成章的开始了 ...
- 我的Android进阶之旅------>解决Jackson等第三方转换Json的开发包在开启混淆后转换的实体类数据都是null的bug
1.错误描述 今天测试人员提了一个bug,说使用我们的app出现了闪退的bug,后来通过debug断点调试,发现我们的app转换服务器发送过来的json数据后,都是为null.而之前已经提测快一个月的 ...
- 我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(三)Android客户端功能实现
我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(一)PC服务器端(地址:http://blog.csdn.net/ouyang_pen ...
- 我的Android进阶之旅------>如何将Activity变为半透明的对话框?
我的Android进阶之旅------>如何将Activity变为半透明的对话框?可以从两个方面来考虑:对话框和半透明. 在定义Activity时指定Theme.Dialog主题就可以将Acti ...
- 我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)
正如在<我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)>一文中看到的,在AbstractBoard的代码中,当程序需要创建N个Piec ...
- (转载)Android常用的Dialog对话框用法
Android常用的Dialog对话框用法 Android的版本有很多通常开发的时候对话框大多数使用自定义或是 Google提供的V4, V7 兼容包来开发保持各个版本的对话框样式统一,所以这里使用的 ...
随机推荐
- Cookie 、session、token都是什么?
1.Cookie 起源:1993年,网景浏览器的员工为了让用户访问某网站时,进一步提高访问速度,实现个人化网络发明了cookie.(看来有时候的偷懒会促进社会的进步啊~,就像人们不想做饭就诞生了外卖) ...
- Unity中的优化技术
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/candycat1992/article/ ...
- 机器学习笔记(一)· 感知机算法 · 原理篇
这篇学习笔记强调几何直觉,同时也注重感知机算法内部的动机.限于篇幅,这里仅仅讨论了感知机的一般情形.损失函数的引入.工作原理.关于感知机的对偶形式和核感知机,会专门写另外一篇文章.关于感知机的实现代码 ...
- 前端技术之:JavaScript Test 断言库
expect 声称可以写更好的断言. https://github.com/mjackson/expect chai 可以写BDD样式的断言,也可以写TDD样式的断言,可用于Node.js与浏览器 ...
- 「刷题」JZPKIL
这道反演题,真牛逼. 以下用$B$代表伯努利数,$l*g=f$代表狄利克雷卷积,先推式子. 对于给出的$n,x,y$求一百组数据的$ans$ $\begin{array}{rcl} ans & ...
- 可爱精灵宝贝 DP/爆搜
考崩了 T2 这题是个DP的好题啊(凡是我不会的都是好题,所以所有的题都是好题(雾)) DP思路: 分析性质:这个人对于路上的小精灵,能收集就一定会收集,即他每次都会收集这一段区间的小精灵 然后就考虑 ...
- 「Luogu 1349」广义斐波那契数列
更好的阅读体验 Portal Portal1: Luogu Description 广义的斐波那契数列是指形如\(an=p \times a_{n-1}+q \times a_{n-2}\)的数列.今 ...
- 2019年10月11号 王庆超 linux
1.计算机操作系统简介 (1)掌握操作系统的定义:操作系统是一个用来协调.管理和控制计算机硬件和软件资源的系统 程序,它位于硬件和应用程序之间. (2)掌握操作系统的内核的定义:操作系统的内核是一个管 ...
- 本周授课内容:http,https,Tomcat,servlet
https:https是基于安全套接字的http协议,也可以理解为是http+ssl/tls(数字证书)的组合 http和https的区别: HTTP 的 URL 以 http:// 开头,而 HTT ...
- Git III: 撤销操作
所谓撤销操作,无非就是后悔药.对Git来说,撤销操作主要是以下几块: 撤销已经提交的Commit. 对已经通过git add加入Stage的文件,进行unstage操作. 对已经是Untracked却 ...