【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 兼容包来开发保持各个版本的对话框样式统一,所以这里使用的 ...
随机推荐
- WinDbg命令系统
WinDbg命令系统 WinDbug三种命令 WinDbug是一个强大的调试器,大部分很多功能都是通过命令来实现的,命令在命令窗口中输入,主要分为以下三类: 标准命令 标准命令提供了调试器的基本功能, ...
- Android_Fragment
(一) Faragment有自己的生命周期 Fragment依赖于Activity Fragmen通过getActivity()可以获取所在Activity:Activity通过FragmentMan ...
- MONGODB-LINUX 安装步骤
1.MongoDB 提供了 linux 各发行版本 64 位的安装包,你可以在官网下载安装包. 下载地址:https://www.mongodb.com/download-center#communi ...
- Python基础知识-运算符
今日学习内容 用户交互 用户交互就是人向机器发出指令,机器分析处理后,给人们返回操作结果(装13的说法).直白地讲,就是人往计算机中输入(input)数据,计算机输出(output)结果.交互的本质就 ...
- 第三十八章 POSIX线程(二)
线程属性 初始化与销毁属性 int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t * ...
- Win10 连接CentOS 8 的Docker容器中 SqlServer数据库
楔子 工作在win10环境下,使用Docker Windows桌面版容器化SqlServer数据库连接使用(主要是想用Docker),但是同时需要Linux系统测试,win10 下VMware 虚拟机 ...
- 洛谷P2107 【小Z的AK计划】
#include<iostream> #include<queue> #include<algorithm> using namespace std; struct ...
- 文件I/O——文件打开函数(open/openat)
一.open函数 1.函数原型:int open(const char *path,int oflag,.../* mode_t mode */); 2.头文件:#include <fcntl. ...
- Angular开发规范
目录 一. 前言 1.1. 规范目的 1.2. 局限性 二. 文件规范 2.1. 文件结构约定 2.2. 单一职责原则 ...
- Numpy 中的聚合操作
# 导包 import numpy as np sum np.random.seed(10) L = np.random.random(100) sum(L) np.sum(L) min np.min ...