美文网首页
Android 万能Dialog框架

Android 万能Dialog框架

作者: 因为我的心 | 来源:发表于2021-07-06 11:04 被阅读0次

    一、前言:

    为什么要封装这个框架呢? 我们目前自定义Dialog的常见方式有:

    使用系统自带的.
    优点: 快速、简单、粗暴.
    缺点: 比较难看, 很多属性没法改, 灵活性非常差.
    使用第三方别人封装好的常见样式.
    优点: 样式比系统好看, 快速, 总体比第1种好用.
    缺点: 布局固定, 无法更改, 不够灵活
    自定义CustomDialog 继承 Dialog, 然后在CustomDialog加载自己的布局, 封装自己的属性.
    优点: 灵活性非常高, 任何弹窗都可以实现.
    缺点: 写CustomDialog 比较麻烦, 时间上远超前面两种方式, 代码复用性不够强.

    为了能自定义各种dialog, 又能把节约时间, 所以就出了这个框架

    github地址: https://github.com/liys666666/LDialog

    二、 使用方法

    1、导入项目

    //项目根目录下 build.gradle
    allprojects {
            repositories {
                ...
                maven { url 'https://jitpack.io' } //添加
            }
        }
    
    dependencies {
        //如果项目是support包,可以使用V2.0.1版本
         implementation 'com.github.liys666666:LDialog:V2.1.0'  //添加
    }
    

    2、所有属性

    LDialog dialog = new LDialog(this, R.layout.dialog_confirm).with(); //你的布局
            dialog
                    .setMaskValue(0.5f) //遮罩--透明度
                    //1.设置宽
                    .setWidth() //单位:dp
                    .setWidthPX() //单位:px
                    .setWidthRatio(0.8) //占屏幕宽比例
    
                    //2.设置高
                    .setHeight() //单位:dp
                    .setHeightPX() //单位:px
                    .setHeightRatio() //占屏幕高比例
    
                    //3.设置背景
                    .setBgColor(Color.WHITE) //背景颜色
                    .setBgColorRes(R.color.white) //res资源
                    .setBgRadius() //圆角, 单位:dp
                    .setBgRadiusPX() //圆角, 单位:px
    
                    //4.设置弹框位置 和 动画(显示和隐藏动画)
                    .setGravity(Gravity.TOP | Gravity.BOTTOM) //设置弹框位置
                    .setGravity(Gravity.LEFT, 0, 0) //设置弹框位置(偏移量)
                    .setAnimationsStyle(R.style.dialog_translate) //设置动画
    
                    //5.设置具体布局
                    //5.1 常见系统View属性
                    .setText(R.id.tv_title, "确定")
                    .setTextColor()
                    .setBackgroundColor()
                    .setBackgroundRes()
                    .setImageBitmap()
                    .setVisible()
                    .setGone()
                    //5.2 其它属性
                    .setCancelBtn(R.id.tv_cancel) //设置按钮,弹框消失的按钮
                    .setOnClickListener(new LDialog.DialogOnClickListener() { //设置按钮监听
                        @Override
                        public void onClick(View v, LDialog customDialog) {
                            customDialog.dismiss();
                        }
                    }, R.id.tv_confirm, R.id.tv_cancel)  //可以传多个
                    .show(); //显示
    

    3、使用说明

    ①. 简单使用(主要布局属性)
    步骤1: new对象, 加载你的布局
    步骤2: with初始化
    步骤3: 设置控件的属性
    步骤4: show()
    如果有额外需求, 可用dialog.getView(viewId)获取对应的控件, 随便怎么设置都可以

    LDialog dialog = new LDialog(this, R.layout.dialog_confirm); //设置你的布局
    dialog.with()
                    //设置布局控件的各种属性
                    .setText(R.id.tv_content, "确定要退出登录吗?")
                    .setCancelBtn(R.id.tv_cancel) //点击对应按钮, dialog会消失(可选)
                    .setOnClickListener(new LDialog.DialogOnClickListener() { //设置监听
                        @Override
                        public void onClick(View v, LDialog lDialog) { //可以根据viewId判断
                            lDialog.dismiss();
                        }
                    }, R.id.tv_confirm, R.id.tv_content) //可以设多控件
                    .show();
    

    结果如下图:


    图片.png

    ②. dialog本身的属性:

    dialog.with()
                    //1.设置宽
                    .setWidth() //单位:dp
                    .setWidthPX() //单位:px
                    .setWidthRatio(0.8) //占屏幕宽比例
    
                    //2.设置高
                    .setHeight() //单位:dp
                    .setHeightPX() //单位:px
                    .setHeightRatio() //占屏幕高比例
    
                    //3.设置背景
                    .setBgColor(Color.WHITE) //背景颜色
                    .setBgColorRes(R.color.white) //res资源
                    .setBgRadius() //圆角, 单位:dp
                    .setBgRadiusPX() //圆角, 单位:px
    
                    //4.设置弹框位置 和 动画(显示和隐藏动画)
                    .setGravity(Gravity.TOP | Gravity.BOTTOM) //设置弹框位置
                    .setGravity(Gravity.LEFT, 0, 0) //设置弹框位置(偏移量)
                    .setAnimationsStyle(R.style.dialog_translate) //设置动画
    

    说明: 对于动画属性, setAnimationsStyle, 需要在res/values/styles.xml 设置, 动画属性参考: android动画《一》补间动画

        <style name="dialog_alpha" parent="android:Animation">
            <item name="android:windowEnterAnimation">@anim/dialog_alpha_show</item>  <!--显示动画-->
            <item name="android:windowExitAnimation">@anim/dialog_alpha_cancel</item> <!--消失动画-->
        </style>
    
        <style name="dialog_translate" parent="android:Animation">
            <item name="android:windowEnterAnimation">@anim/dialog_translate_show</item>  <!--显示动画-->
            <item name="android:windowExitAnimation">@anim/dialog_translate_cancel</item> <!--消失动画-->
        </style>
    

    三、总结:

      1. 扩展性强. 这个框架只是一个盒子, 里面都是空的, 喜欢放什么样的布局完全看个人喜欢, 可进行二次封装成自己喜欢的样式.
      1. 使用方便. 链式调用, 属性明了, 不记得一查就可以了.
      1. 学习成本低, 只需设置属性即可, 其它完全不用管

    gitee:https://gitee.com/luoyanyong/LDialog
    链接:https://www.jianshu.com/p/8eea6af1dd2a

    相关文章

      网友评论

          本文标题:Android 万能Dialog框架

          本文链接:https://www.haomeiwen.com/subject/ysmbultx.html