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

[本章完...]

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,252评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,886评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,814评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,869评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,888评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,475评论 1 312
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,010评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,924评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,469评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,552评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,680评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,362评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,037评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,519评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,621评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,099评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,691评论 2 361

推荐阅读更多精彩内容

  • 最近从图书馆里借到了凯文.凯利的《失控》。很久以前从清华的微信移动图书馆推荐上注意到这本书,原以为是讲大众化媒介下...
    圈儿酸阅读 114评论 0 0
  • 1. 把用户作为活生生的真实的人去认知和接纳。不能用角色去臆测,角色是压力训练出来的,不是真实存在的。 2. 三级...
    新明心语阅读 116评论 0 0
  • 带状疱疹真的好痛呀!半个月了,痛了半个月了,希望快快好起来!每天打针吃药,抺药,抹药、打针吃药,如此反复,让我真的...
    愿时光待我安好阅读 127评论 0 0
  • 本文内容精简、整理、摘抄、有感于《鸟哥的Linux私房菜》第八章 • 文件与文件系统的压缩、打包和备份。 压缩 目...
    happyJared阅读 837评论 10 18