资讯专栏INFORMATION COLUMN

Android之Material Dialogs详解

番茄西红柿 / 2535人阅读

摘要:文章大纲一什么是二实战三项目源码下载一什么是是一个漂亮流畅可定制的对话框,核心模块包含创建基本列表单多选项进度输入等对话框。

文章大纲

一、什么是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.ucloud.cn/yun/2385.html

相关文章

  • 最全面的 Material Design 学习资料

    摘要:是以后的主流设计风格,现在已经越来越多的遵循的设计规范来进行开发,是每个开发者必学的基础技术。 本人目前正在找工作,想了解我的详细情况请移步到我的 网页版简历 ,希望能得到各位的推荐,谢谢! 关于 Material Design 在这里我就不在多做介绍了,想必做Android开发的 都听过它的大名 ,甚至用过无数次了。Material Design 是以后 Android 的主流设计风...

    yagami 评论0 收藏0
  • Material Design控件使用(完结篇)

    摘要:本文整合前面四篇的控件,再结合豆瓣读书的,做了一个搜索书籍和查看书籍信息的。项目依赖库书籍列表使用了和进行布局。 本文整合前面四篇的控件,再结合豆瓣读书的API,做了一个搜索书籍和查看书籍信息的Demo。 项目依赖库 groovydependencies { compile fileTree(dir: libs, include: [*.jar]) compile ...

    ISherry 评论0 收藏0
  • Material Design - 收藏集 - 掘金

    摘要:与老前辈使用攻略刷新篇掘金小序继使用攻略助力篇之后,一直没有更新上下拉刷新的功能实现,主要还是受限于个人现有的技术实力,总觉得没有经过实际打磨的,就不敢有上场的自信。 DrawerLayout 和 NavigationView 使用详解 - Android - 掘金Android Material Design Library 推出了很长时间,越来越多的APP使用了符合Library ...

    stormzhang 评论0 收藏0
  • GitHub Top 100 的 Android 开源库简介

    摘要:它采用一种假定有序快速匹配的算法,把的性能提升到极致,是目前语言中最快的库。 继上一篇 Android 学习资料收集 得到不少响应,你们给了我很多动力, 因此我决定再整理下 GitHub 上前 100 的 Android 开源库简介,希望对你们有所帮助 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据GitHub搜索Jav...

    oneasp 评论0 收藏0
  • RxJavaAndroid - 收藏集 - 掘金

    摘要:框架基于的一款新闻阅读掘金,一款新闻阅读框架,基于,基本涵盖了当前端开发最常用的主流框架,基于此框架可以快速开发一个。本文已授权任阅小说阅读器,高仿追书神器掘金任阅小说阅读器。掘金清风音乐,一款安卓音乐播放器,基于。 AndroidFire框架--基于 Material Design+MVP+RxJava+Retrofit+Glide的一款新闻阅读 App - 掘金AndroidFir...

    Magicer 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<