文档章节

Android之Material Dialogs详解(非原创)

o
 osc_gu9d45li
发布于 2019/04/07 19:15
字数 1229
阅读 25
收藏 0

精选30+云产品,助力企业轻松上云!>>>

文章大纲

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

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Android使用gradle依赖管理、依赖冲突终极解决方案(转)

Android使用gradle依赖管理、依赖冲突终极解决方案 在Android开发中,相信遇到关于版本依赖的问题的同学有不少。虽然Android Studio一般都会自动帮我们去重,但是有时候去重失败了还是需要手...

osc_uewtwxky
2019/05/31
2
0
在低版本android系统上实现Material设计应用

Material Design真的很好看,动画效果真的很实用。前面也写了一些文章介绍如何编写Material风格的程序,但是很多都是一些新的api,低版本上面没有这些api,我们没办法使用。但是不用气馁,g...

待续_
2015/08/07
88
0
Android 开发程序员必备网站

开发必备网站: Android 开发各种工具下载 Android 开发国内大牛集合 Android 开发技术博客周刊 Android 开发技术周报中文版 Android 优秀开源项目集合以及源码分析 Android 万能的技术交流社...

api接口设计
2016/11/08
253
0
【0085】【知识积累】-【Android酷炫实用的开源框架(UI框架)】

1.链接地址:http://blog.csdn.net/fancylovejava/article/details/45787729 1.Side-Menu.Android 分类侧滑菜单,Yalantis 出品。 项目地址:https://github.com/Yalantis/Side-Menu.Android......

osc_qqjot4oj
2018/03/08
3
0
在低版本android系统上实现Material设计应用

Material Design真的很好看,动画效果真的很实用。前面也写了一些文章介绍如何编写Material风格的程序,但是很多都是一些新的api,低版本上面没有这些api,我们没办法使用。但是不用气馁,g...

码农明明
2014/11/17
1.1W
12

没有更多内容

加载失败,请刷新页面

加载更多

平时使用的Lszrz到底是什么协议?说说Xmodem/Ymodem/Zmodem

XMODEM, YMODEM, and ZMODEM 由于平时使用rz/sz较多,r/s好理解,一个send一个receive。但是由不太清楚z是什么意思,故有此文。 sx/rx, sb/rb (b=batch)和sz/rz分别实现了xmodem,ymodem和z...

独钓渔
54分钟前
17
0
真正的强智能时代已经到来。道翰天琼认知智能机器人平台API大脑。

最近,我常说人工智能的寒冬快要来了,提醒业界要做好思想准备,但同时我也说:冬天来了,春天就不会远了…… 2019年6月我写了篇文章《深度学习的问题究竟在哪?》,说到深度学习的一个主要问...

jackli2020
今天
24
0
什么是控制型人格,控制型人格的筛查测试

一、 什么是控制性人格 拥有控制型人格的人,他们会尽力的隐藏自己的意图,但是又会使用很微妙的方式来利用周围人的弱点,进而占取便宜时,使他们能够得到自己想要的东西。这类人的控制欲非常...

蛤蟆丸子
今天
14
0
【Spring】Spring AOP 代理对象生成逻辑源码分析

1. spring aop案例(POJO注入) 1.0 被代理接口 TargetInterface /** * 被代理的接口 * @author Yang ZhiWei */public interface TargetInterface { void show(); String show......

ZeroneLove
今天
36
0
聊聊dubbo-go的gracefulShutdownFilter

序 本文主要研究一下dubbo-go的gracefulShutdownFilter gracefulShutdownFilter dubbo-go-v1.4.2/filter/filter_impl/graceful_shutdown_filter.go type gracefulShutdownFilter struct {......

go4it
今天
30
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部