Android之Material Dialogs详解(非原创)
文章大纲
一、什么是Material Dialogs
二、Material Dialogs实战
三、项目源码下载
一、什么是Material Dialogs
Material Dialogs是一个漂亮、流畅、可定制的对话框,核心模块包含创建基本、列表、单/多选项、进度、输入等对话框。
二、Material Dialogs实战
使用注意点:
(1)使用MaterialDialog的Activity需要继承AppCompat
(2)默认的MaterialDialog在点击空白位置时候会自动关闭弹出框,取消dialog以外的区域的点击事件代码如下
//取消dialog以外的区域的点击事件(默认为true)这里我们设置成false就ok啦
.canceledOnTouchOutside(false)
1. 添加依赖
//添加material-dialogs依赖//核心模块的依赖implementation 'com.afollestad.material-dialogs:core:0.9.1.0'//公共模块的依赖 //公共模块包含不是每个人都需要的扩展库。 这包括 ColorChooserDialog、FolderChooserDialog、Material Preference 类和 MaterialSimpleListAdapter / MaterialSimpleListItem implementation 'com.afollestad.material-dialogs:commons:0.9.1.0'
2. 创建基本弹框
new MaterialDialog.Builder(MainActivity.this) .title("标题") .content("内容") .positiveText("确认") .negativeText("取消") .show();
运行结果如下:
温馨提示:取消弹框采用dialog.dismiss();
3. 创建带图标弹框(包含两个按钮)
new MaterialDialog.Builder(MainActivity.this) .title("标题") .content("内容;测试长度测试长度测试长度测试长度测试长度测试长度测试长度测试长度测试长度测试长度测试长度测试长度测试长度测试长度测试长度测试长度测试长度测试长度") .positiveText("确认") .negativeText("取消") .icon(getResources().getDrawable(R.drawable.ic_launcher)) .show();
运行结果如下:
温馨提示:可以用maxIconSize(int size)限制图标最大size
4. 创建带三个按钮弹框
new MaterialDialog.Builder(MainActivity.this) .title("标题") .content("内容") .positiveText("确认") .negativeText("取消") .neutralText("更多") .show();
运行结果如下:
5. 创建带点击事件的弹出框
//如果你想监听三种动作按钮,只用一个onAny就行了,which会告诉你点击了什么按钮,根据需要去判断,which.toString()的名字分别是Positive,Negative等//new MaterialDialog.Builder(this)// .title("标题")// .content("内容") // .positiveText("确认") // .negativeText("取消") // .neutralText("更多") // .onAny(new MaterialDialog.SingleButtonCallback() { // @Override // public void onClick(MaterialDialog dialog, DialogAction which) { // Toast.makeText(MainActivity.this, which.toString(), Toast.LENGTH_SHORT).show(); // } // }) // .show(); click_button = (Button)findViewById(R.id.click_button); click_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new MaterialDialog.Builder(MainActivity.this) .title("标题") .content("内容") .positiveText("确认") .negativeText("取消") .neutralText("更多") .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(MaterialDialog dialog, DialogAction which) { Toast.makeText(MainActivity.this, "点击了确认按钮", Toast.LENGTH_SHORT).show(); } }) .onNeutral(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(MaterialDialog dialog, DialogAction which) { Toast.makeText(MainActivity.this, "点击了更多按钮", Toast.LENGTH_SHORT).show(); } }) .onNegative(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(MaterialDialog dialog, DialogAction which) { Toast.makeText(MainActivity.this, "点击了取消按钮", Toast.LENGTH_SHORT).show(); } }) .show(); } });
运行结果如下:
6. 创建是否不再询问弹出框
new MaterialDialog.Builder(MainActivity.this).title("标题").content("内容") .positiveText("确认") //第二次参数代表初始状态是否为勾选 .checkBoxPromptRes(R.string.isShowAgain, true, null) .onAny(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(MaterialDialog dialog, DialogAction which) { //dialog.isPromptCheckBoxChecked()+""如果返回true,表示用户勾选了,false表示没有 Toast.makeText(MainActivity.this, dialog.isPromptCheckBoxChecked()+"", Toast.LENGTH_SHORT).show(); } }) .show();
运行结果如下:
7. 创建不带样式列表单选框
final String[] array = {"aa","bb"};
new MaterialDialog.Builder(MainActivity.this) .title("标题") .positiveText("确认") .negativeText("取消") .items(array) .itemsCallback(new MaterialDialog.ListCallback() { @Override public void onSelection(MaterialDialog dialog, View view, int which, CharSequence text) { Toast.makeText(MainActivity.this, which+"", Toast.LENGTH_SHORT).show(); } }) .show();
运行结果如下:
8. 创建带样式的列表单选框
new MaterialDialog.Builder(MainActivity.this).title("标题").items(array).itemsCallbackSingleChoice(-1, new MaterialDialog.ListCallbackSingleChoice() { @Override public boolean onSelection(MaterialDialog dialog, View view, int which, CharSequence text) { return true; } }) .show();
运行结果如下:
9. 创建多选列表
new MaterialDialog.Builder(MainActivity.this).title("标题").positiveText("确认") .items(array) .itemsCallbackMultiChoice(null, new MaterialDialog.ListCallbackMultiChoice() { @Override public boolean onSelection(MaterialDialog dialog, Integer[] which, CharSequence[] text) { return true; } }) .show();
运行结果如下:
10. 创建自定义视图
new MaterialDialog.Builder(MainActivity.this) .title("Title") .customView(R.layout.activity_main, true) .positiveText("CHOOSE") .show();
运行结果如下:
11.创建带限制的输入框
new MaterialDialog.Builder(MainActivity.this).title("Title")//限制输入的长度 .inputRangeRes(2, 20, R.color.colorPrimary) //限制输入类型 .inputType(InputType.TYPE_CLASS_PHONE) .input("哈哈哈", null, new MaterialDialog.InputCallback() { @Override public void onInput(MaterialDialog dialog, CharSequence input) { Toast.makeText(MainActivity.this, input, Toast.LENGTH_SHORT).show(); } }) .positiveText("确定") .show();
运行结果如下:
12. 创建等待提示框(圆圈加载)
new MaterialDialog.Builder(MainActivity.this) .title("提示框") .content("请稍等...") .progress(true, 0) .show();
运行结果如下:
13. 创建等待提示框(水平加载)
new MaterialDialog.Builder(MainActivity.this) .title("提示框") .content("请稍等...") .progress(true, 0) .progressIndeterminateStyle(true) .show();
运行结果如下:
14. 创建带进度条的等待框
new MaterialDialog.Builder(MainActivity.this).title("Progress").content("please wait...").contentGravity(GravityEnum.CENTER).progress(false, 100, true).cancelListener(dialog -> { if (thread != null) { thread.interrupt(); } }).showListener(dialogInterface -> { final MaterialDialog dialog = (MaterialDialog) dialogInterface; startThread(() -> { while (dialog.getCurrentProgress() != dialog.getMaxProgress() && !Thread.currentThread().isInterrupted()) { if (dialog.isCancelled()) { break; } try { Thread.sleep(50); } catch (InterruptedException e) { break; } dialog.incrementProgress(1); } runOnUiThread(() -> { thread = null; dialog.setContent(getString(R.string.md_done_label)); }); }); }).show();
运行结果如下:
15.其他功能
(1)MaterialDialog可以通过以下方式设置颜色
// .titleColorRes(R.color.material_red_500)
// .contentColor(Color.WHITE) // notice no 'res' postfix for literal color
// .linkColorAttr(R.attr.my_link_color_attr) // notice attr is used instead of none or res for attribute resolving
// .dividerColorRes(R.color.material_pink_500) // .backgroundColorRes(R.color.material_blue_grey_800) // .positiveColorRes(R.color.material_red_500) // .neutralColorRes(R.color.material_red_500) // .negativeColorRes(R.color.material_red_500) // .widgetColorRes(R.color.material_red_500) // .buttonRippleColorRes(R.color.material_red_500)
(2)通过以下方式设置MaterialDialog主题
.theme(Theme.DARK)
(3)设置文字、按钮等内容的位置
.titleGravity(GravityEnum.CENTER).contentGravity(GravityEnum.CENTER) .btnStackedGravity(GravityEnum.START) .itemsGravity(GravityEnum.END) .buttonsGravity(GravityEnum.END)
(4)改变drawable被点击或聚焦时的状态
.btnSelector(R.drawable.custom_btn_selector) .btnSelector(R.drawable.custom_btn_selector_primary, DialogAction.POSITIVE) .btnSelectorStacked(R.drawable.custom_btn_selector_stacked) .listSelector(R.drawable.custom_list_and_stackedbtn_selector)!
三、项目源码下载
链接:https://pan.baidu.com/s/1dJFaw1xfvaOiI8XGPwwaRg
密码:sfd8
转载于:https://www.cnblogs.com/WUXIAOCHANG/p/10666581.html
Android之Material Dialogs详解(非原创)相关推荐
- ANDROID L——Material Design详解(动画篇)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...
- ANDROID L——Material Design详解(视图和阴影)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...
- ANDROID L——Material Design详解(主题和布局)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...
- Redis基础知识详解(非原创)
文章大纲 一.Redis介绍 二.Redis安装并设置开机自动启动 三.Redis文件结构 四.Redis启动方式 五.Redis持久化 六.Redis配置文件详解 七.Redis图形化工具 八.Ja ...
- 产品经理之市场需求分析详解(非原创)
文章大纲 一.为什么要进行市场需求 二.市场需求分析要素实战 三.市场需求文档(MRD)模板下载 四.参考文章 一.为什么要进行市场分析 市场分析在中小型公司中,很难得以真正实施,但进行市场分析 ...
- 产品经理之PRD详解(非原创)
文章大纲 一.PRD基础 二.PRD要素讲解 三.相关模板下载 四.参考文章 一.PRD基础 1. PRD简介 PRD中文意思为:产品需求文档.PRD的主要使用对象有:开发.测试.项目经理.交互 ...
- MySQL数据库基础详解(非原创)
文章大纲 一.数据库简介 二.Mysql数据库简介 三.Mysql安装与服务启动(Windows版本) 四.Mysql图形化工具 五.Mysql存储引擎精讲 六.Mysql数据类型介绍 七.Mysql ...
- Java之Spring mvc详解(非原创)
文章大纲 一.Spring mvc介绍 二.Spring mvc代码实战 三.项目源码下载 四.参考文章 一.Spring mvc介绍 1. 什么是springmvc springmvc是spri ...
- Android应用坐标系统全面详解
Android应用坐标系统全面详解 原文链接:CSDN@工匠若水,http://blog.csdn.net/yanbober/article/details/50419117 1. 背景 去年有很多人 ...
- android ------- 开发者的 RxJava 详解
在正文开始之前的最后,放上 GitHub 链接和引入依赖的 gradle 代码: Github: https://github.com/ReactiveX/RxJava https://githu ...
最新文章
- EntLib 3.1学习笔记(6) : Security Application Block
- 《JavaScript设计模式与开发实践》读书笔记之中介者模式
- 我的《一种前端代码质量检测方法及装置》专利申请
- 总结几点Quartz的经验
- STM32/M3/M0关于开关总中断的问题
- 李楠谈小米MIX Alpha:卖19999元还是不赚钱
- c语言 if判断条件语句吗,if条件判断语句,谁能帮我分析一下?
- php控制器,php模型和控制器之间交互
- mongodb安装、远程访问设置、管理命令、增删改查操作以及GUI
- excel手机版_手机自带便签如何导入新手机?试试这款便签同步助手
- JS延迟加载百度分享代码,提高网页速度
- lsqcurvefit拟合结果为复数_高考数学专题突破,向量运算与复数运算、算法、推理与证明,方法规律总结,知识归纳,易错示警...
- 190227每日一句
- JUCE入门级教程01——界面设计(细分12块)
- JAVA基础——接口(全网最详细教程)
- 微信公众号开发之获得素材列表
- 万邦淘宝/天猫按关键字搜索淘宝商品 API 返回值
- Spring 学习笔记(day02)
- 计算机可以进行磁盘管理,磁盘管理里可以看到盘 但是我的电脑里没有
- 【学习笔记】深蓝学院-三维点云处理