• Android 开发 MaterialDialog框架的详解


    前言

      开始之前还是需要废话一下,因为有一些坑需要告知。首先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();
        }

    效果图:

    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;
    
        }
  • 相关阅读:
    servlet规范核心类图
    策略模式
    掌握Spark机器学习库-07-回归算法原理
    掌握Spark机器学习库-07-线性回归算法概述
    掌握Spark机器学习库-07-回归分析概述
    掌握Spark机器学习库-06-基础统计部分
    掌握Spark机器学习库-05-spark中矩阵与向量的使用
    测试开发要懂的设计模式知识
    数据可视化工具-ECharts
    掌握Spark机器学习库-02-mllib数据格式
  • 原文地址:https://www.cnblogs.com/guanxinjing/p/10312793.html
Copyright © 2020-2023  润新知