文章大纲

一、什么是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

Android之Material Dialogs详解的更多相关文章

  1. ANDROID L——Material Design详解(UI控件)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

  2. [转]ANDROID L——Material Design详解(动画篇)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 转自:http://blog.csdn.net/a396901990/article/de ...

  3. 转:android Support 兼容包详解

    本文转自stormzhang的ANDROID SUPPORT兼容包详解 背景 来自于知乎上邀请回答的一个问题Android中AppCompat和Holo的一个问题?, 看来很多人还是对这些兼容包搞不清 ...

  4. 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING

    <Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th  2014 Email:skyseraph00@163.com 更多精彩请直接 ...

  5. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  6. android bundle存放数据详解

    转载自:android bundle存放数据详解 正如大家所知道,Activity之间传递数据,是将数据存放在Intent或者Bundle中 例如: 将数据存放倒Intent中传递: 将数据放到Bun ...

  7. Cordova 打包 Android release app 过程详解

    Cordova 打包 Android release app 过程详解 时间 -- :: SegmentFault 原文 https://segmentfault.com/a/119000000517 ...

  8. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  9. 给 Android 开发者的 RxJava 详解

    我从去年开始使用 RxJava ,到现在一年多了.今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 .而最近这几个 ...

随机推荐

  1. Unity3D学习(一):简单梳理下Unity跨平台的机制原理

    前言 首先需要了解的是,Unity3D的C#基础脚本模块是通过Mono来实现的. 什么是Mono? 参考下百度百科:Mono是一个由Novell公司(由Xamarin发起)主持的项目,并由Miguel ...

  2. Mysql中MyISAM引擎和InnoDB引擎的比较

    结论 如果不清楚自己应该用什么引擎,那么请选择InnoDB,Mysql5.5+的版本默认引擎都是InnoDB,早期的Mysql版本默认的引擎是MyISAM MyISAM 和 InnoDB的适用场景 M ...

  3. linux几种时间函数总结

    一.linux时间函数总结 最近的工作中用到的时间函数比较频繁,今天抽时间总结一下,在linux下,常用的获取时间的函数有如下几个:  asctime,  ctime, gmtime, localti ...

  4. 通过VirtualBox安装Linux系统(CentOS7)

    本文目的:创建虚拟系统.在windows系统中通过虚拟工具VirtualBox创建一个虚拟系统CentOS. 备注:(1)版本如下:VirtualBox-5.2.12-122591-Win 和Cent ...

  5. 在echarts里在geojson绘制的地图上展示散点图(气泡)、线集。

    先来要实现的效果图: 下方图1是官网的案例:http://www.echartsjs.com/gallery/editor.html?c=scatter-map 下图2是展示气泡类型为pin的效果: ...

  6. Tensorflow学习-数据读取

    Tensorflow数据读取方式主要包括以下三种 Preloaded data:预加载数据 Feeding: 通过Python代码读取或者产生数据,然后给后端 Reading from file: 通 ...

  7. 【环套树+树形dp】Bzoj1040 [ZJOI2008] 骑士

    Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火 ...

  8. 【dfs+连通分量】Bzoj1123 POI2008 BLO

    Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. Input 输入n&l ...

  9. appium 提示报错“TypeError: 'unicode' object is not callable”的解决方式!

    这里提到的这个报错,是小错误且容易经常会犯,有时需要特别注意使用. 目的要求结果:根据某个元素的id值获取到对应id的text值,并且将获取的text值与本身存在的text值做比较,查看text值是否 ...

  10. 了解Scala反射

    本篇文章主要让大家理解什么是Scala的反射, 以及反射的分类, 反射的一些术语概念和一些简单的反射例子. 什么是反射 我们知道, Scala是基于JVM的语言, Scala编译器会将Scala代码编 ...