前言

  开始之前还是需要废话一下,因为有一些坑需要告知。首先MaterialDialog在GitHub上作者已经转型使用100% Kotlin语言编写,虽然可以在Java里调用Kotlin使用。但是个人暂时不想接触,所以依然会使用老版本的MaterialDialog。Java最后的版本是0.9.6.0版本,所以我们以这个版本为例子记录一些平时个人用到的例子。另外不需要太担心高版本无法适配,目前在Android 9.0版本依然效果良好。  

  作者的GitHub地址:https://github.com/afollestad/material-dialogs

  使用参考博客:https://blog.csdn.net/u010904027/article/details/53535590

依赖

  implementation 'com.afollestad.material-dialogs:core:0.9.6.0'

代码例子

等待弹窗例子

/**
     * 等待弹窗1
     */
    public void waitFor1() {
        MaterialDialog waitForDialog = new MaterialDialog.Builder(this)
                .content("正在登入...")
                .progress(true,-1)//等待图标 true=圆形icon false=进度条
                .canceledOnTouchOutside(false)//点击外部不取消对话框
                .build();
        waitForDialog.show();
    }

    /**
     * 等待弹窗2
     */
    @Override
    public void waitFor2() {
        MaterialDialog waitForDialog = new MaterialDialog.Builder(this)
                .content("正在登入...")
                .progress(true,-1)//等待图标 true=圆形icon false=进度条
                .cancelable(false)//不会被取消 (包括返回键和外部点击都无法取消)
                .build();
        waitForDialog.show();
    }

普通对话框例子

public void dialog() {
        MaterialDialog dialog = new MaterialDialog.Builder(this)
                .title("提示")//标题
                .content("您未添加人脸识别,请点击确定录入")//内容
                .icon(getResources().getDrawable(R.mipmap.ic_logo,null))//图标
                .positiveText("确定") //肯定按键
                .neutralText("稍后询问")  //中性按键
                .negativeText("取消") //否定按键
                .cancelable(true)
                .onPositive(new MaterialDialog.SingleButtonCallback() { //监听肯定按键
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

                    }
                })
                .onNeutral(new MaterialDialog.SingleButtonCallback() { //监听中性按键
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

                    }
                })
                .onNegative(new MaterialDialog.SingleButtonCallback() { //监听否定按键
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

                    }
                })
                .onAny(new MaterialDialog.SingleButtonCallback() {//三个按键一起监听
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                        switch (which){
                            case POSITIVE:
                                break;
                            case NEUTRAL:
                                break;
                            case NEGATIVE:
                                break;
                        }
                        //或者这样
//                            if (DialogAction.POSITIVE == which){
//
//                            }
                    }
                })
                .build();
        dialog.show();
    }

 单选列表对话框例子

private void singleElectionDialog(){
        int [] itemId = {101,102,103,104,105};
        String [] contentArray = {"一","二","三","四","五"};
        MaterialDialog materialDialog = new MaterialDialog.Builder(this)
                .items(contentArray)//添加item内容数组
                .itemsIds(itemId)//添加item的id
                .itemsCallback(new MaterialDialog.ListCallback() { //点击回调
                    @Override
                    public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
                        Log.e("test", "onSelection: id="+itemView.getId() );

                    }
                })
                .build();
        materialDialog.show();
    }

效果图:

Android 开发 MaterialDialog框架的详解-风君雪科技博客

RecyclerView实现单选列表例子

MaterialDialog materialDialog = new MaterialDialog.Builder(this)
                .title("标题")
                .adapter(mRecyclerViewAdapter,new LinearLayoutManager(this))
                .positiveText(R.string.cancel)
                .build();
        materialDialog.show();

注意这里的.adapter(mRecyclerViewAdapter,new LinearLayoutManager(this)), 适配器一定是RecyclerView的,不能使用ListView,而new LinearLayoutManager(this) 其实就是RecyclerView 布局方向参数.

item点击监听,请参考RecyclerView的具体用法,直接在适配器里实现点击监听.

输入框

private static MaterialDialog tipsDialog(Context context) {
        MaterialDialog tipsDialog = new MaterialDialog.Builder(context)
                .title("进入开发模式")
                .input("请输入密码", "", new MaterialDialog.InputCallback() {
                    @Override
                    public void onInput(@NonNull MaterialDialog dialog, CharSequence input) {

                    }
                })
                .cancelable(false)
                .positiveText("确定")
                .negativeText("取消")
                .onPositive(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                        L.e("输入的密码内容=" + dialog.getInputEditText().getText().toString());
                        if (TextUtils.isEmpty(dialog.getInputEditText().getText().toString())) {
                            Toast.makeText(context, "您没有输入密码", Toast.LENGTH_SHORT).show();
                            dialog.dismiss();
                            dialog = null;
                            return;
                        }
                        if (!dialog.getInputEditText().getText().toString().equals(PASSWORD)) {
                            Toast.makeText(context, "密码错误", Toast.LENGTH_SHORT).show();
                            dialog.dismiss();
                            dialog = null;
                            return;
                        }
                        Toast.makeText(context, "密码正确", Toast.LENGTH_SHORT).show();
                        dialog.dismiss();
                        dialog = null;


                    }
                })
                .onNegative(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                        dialog.dismiss();
                        dialog = null;

                    }
                })
                .build();
        return tipsDialog;

    }