Github项目之Dialog封装

对话框是Android比较常用的UI了,由于对话框的依赖库特别多,特别杂,每个项目所使用的的依赖库有所区别,主要有两点区别较大:(1)对话框的导包,从android.app,到support v4,support v7,v11,v17,android.appcompat,最后到androidx.appcompat;(2)样式的变化,对话框在初始化时,也许会传递一个默认的样式,随着Android版本的迭代,一些老一点的样式已被废弃,导致版本不兼容;本文主要基于androidx的AlertDialog讲解。

图片.png

如图所示的对话框,原生的AlertDialog默认样式已经不能满足需求,我们必须自定义布局和主题样式来实现。

Github地址如下:

https://github.com/NoBugException/AllDialog

该项目是AlertDialog引用的是androidx的依赖包,如果需要换成普通的,还请下载下来自行修改。

v1.0.1

该版本为基本封装,主要支持的功能有:

(1)支持设置AlertDialog的宽度;
(2)添加布局;
(3)设置主题;
(4)设置cancelable值,点击外围是否关闭对话框;
(5)设置OnDismissListener和OnCancelListener监听;

基本使用如下:

        View view =  LayoutInflater.from(this).inflate(R.layout.my_dialog_view, null);
        ImageView alldialog_close = view.findViewById(R.id.alldialog_close);
        alldialog_close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AllDialog.with(MainActivity.this).dismiss();
            }
        });
        AllDialog.with(this)
                .buildDialog(true, R.style.style_all_dialog, null, null)
                .setWidth(250)//对话框宽度,单位为dp,默认是屏幕宽度的五分之四
                .addView(view)
                .show();

with方法传递一个Context;
buildDialog方法新建一个Dialog对象,可传递cancelable、主题、OnDismissListener和OnCancelListener监听;
setWidth方法可以设置对话框的宽度,单位为dp,默认是屏幕宽度的五分之四;
addView方法是该版本封装的核心内容了,addView可以传递任意View,但不仅如此,addView方法还可以多次调用,多个view从上到下线程排列;
show方法最终显示对话框。

我们来看一下这张图:

图片.png

假设我们需要做成上图样子的对话框,那么直接使用addView添加一个布局即可,也可以调用两次addView,分别添加上部分和下部分,如:

                .addView(上部分)
                .addView(下部分)

v1.1.1

引用:

allprojects {
    repositories {
        maven { url 'https://www.jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.NoBugException:AllDialog:1.1.1'
}

修改内容:

(1)新增黑色半透明背景的转圈对话框
(2)基本封装下新增设置高度;

代码示例:

            LoadingBean loadingBean = new LoadingBean();
            loadingBean.setRadii(6);
            loadingBean.setText("请稍等...");
            loadingBean.setTextColor(Color.parseColor("#FFFFFF"));

            AllDialog.with(this)
                    .buildLoadingDialog(loadingBean, null, null)
                    .setWidth(100)//对话框宽度,单位为dp,默认是屏幕宽度的五分之四
                    .setHeight(100)//对话框高度,单位为dp
                    .show();

效果如下:

半透明黑色背景加载对话框.png

v1.2.1

引用:

allprojects {
    repositories {
        maven { url 'https://www.jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.NoBugException:AllDialog:1.2.1'
}

修改内容:

(1)新增白色背景的加载对话框

代码示例:

            LoadingBean loadingBean3 = new LoadingBean();
            loadingBean3.setRadii(6);
            loadingBean3.setText("请稍等...");
            loadingBean3.setTextColor(Color.parseColor("#7700CE"));
            loadingBean3.setType((byte) 1);

            AllDialog.with(this)
                    .buildLoadingDialog(loadingBean3, null, null)
                    //.setWidth(150)//对话框宽度,单位为dp,默认是屏幕宽度的五分之四
                    //.setHeight(150)//对话框高度,单位为dp
                    .show();

效果如下:

image3.png

v1.2.2

引用:

allprojects {
    repositories {
        maven { url 'https://www.jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.NoBugException:AllDialog:1.2.2'
}

修改内容:

(1)新增对话框灰色背景灰暗程度的参数设置;
(2)新增对话框方位的设置;

代码示例:

            AllDialog.with(this)
                    .buildLoadingDialog(loadingBean3, null, null)
                    //.setWidth(150)//对话框宽度,单位为dp,默认是屏幕宽度的五分之四
                    //.setHeight(150)//对话框高度,单位为dp
                    .setDimAmount(0)//设置对话框背景灰暗程度
                    .gravity(Gravity.BOTTOM, 0, 100)//方位
                    .show();

v1.3.3

引用:

allprojects {
    repositories {
        maven { url 'https://www.jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.NoBugException:AllDialog:1.3.3'
}

新增一个普通对话框

(1)可以配置标题文本,标题颜色,标题文本大小;
(2)可以配置正文内容,文本文字颜色,正文文本大小;
(3)可以配置按钮文本大小;
(4)按钮监听回调;

代码示例:

            NormalBean normalBean1 = new NormalBean();
            normalBean1.setTitle("中国大陆");
            normalBean1.setMessage("西方学者曾多次断言:中国遇到的一个长期问题就是养活不了占世界近20%的人口事实证明新中国成立以来勤劳的中国人");
            normalBean1.setTitleColor(Color.parseColor("#1233F0"));
            normalBean1.setMessageColor(Color.parseColor("#2C9AA8"));
            normalBean1.setTitleTextSize(17);
            normalBean1.setMessageTextSize(14);
            normalBean1.setButtonTextSize(14);
            normalBean1.setType((byte) 1);
            AllDialog.with(this)
                    .buildNormalDialog(normalBean1, new ButtonListener() {
                        @Override
                        public void confirm() {
                            AllDialog.with(MainActivity.this).dismiss();
                        }

                        @Override
                        public void cancel() {
                            AllDialog.with(MainActivity.this).dismiss();
                        }
                    }, null, null)
                    .show();

效果如下:

351.gif

v1.4.3

引用:

allprojects {
    repositories {
        maven { url 'https://www.jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.NoBugException:AllDialog:1.4.3'
}

新增一个底部弹出的对话框

该功能就不做过多的参数封装以及优化了,这里直接给出效果给大家参考。

代码示例:

            AllDialog.with(this)
                    .buildBottomDialog(new ButtonListener() {
                        @Override
                        public void confirm() {
                            AllDialog.with(MainActivity.this).dismiss();
                        }

                        @Override
                        public void cancel() {
                            AllDialog.with(MainActivity.this).dismiss();
                        }
                    }, null, null)
                    .show();

效果如下:

353.gif

v1.5.3

引用:

allprojects {
    repositories {
        maven { url 'https://www.jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.NoBugException:AllDialog:1.5.3'
}

新增透明背景的关闭按钮的对话框

该功能就不做过多的参数封装以及优化了,这里直接给出效果给大家参考。

代码示例:

            NormalBean normalBean2 = new NormalBean();
            normalBean2.setType((byte) 2);
            AllDialog.with(this)
                    .buildNormalDialog(normalBean2, null, null, null)
                    .show();

效果如下:

image_6.png

[本章完...]

你可能感兴趣的:(Github项目之Dialog封装)