【FasterDialog】可能是Android上最好用的Dialog框架

https://github.com/XXQAQ/FasterDialog

前言:FasterDialog是一个完全解耦弹窗逻辑与布局样式的三方框架,即便你的众多项目有不同的布局样式需求,只要引入FasterDialog就可以让你的所有项目都用同一份代码描述业务逻辑。

在你的项目设计中,你的UI设计师曾可能提过如下需求:

【FasterDialog】可能是Android上最好用的Dialog框架_第1张图片
图1
【FasterDialog】可能是Android上最好用的Dialog框架_第2张图片
图2
【FasterDialog】可能是Android上最好用的Dialog框架_第3张图片
图3

针对以上的各式各样的需求,以前我们会在每个项目编写满足对应项目需要的Dialog。实际上,在自定义Dialog的过程中,我们发现除了布局或者控件位置样式等属性不同之外,剩余百分之90的逻辑代码都是相似或相同的。

那么,有没有那么一种办法,可以让我们无需书写这百分之90的重复性代码,通过某种协议协定一些规则,使我们的代码兼容所有的UI场景,而在使用的过程,只需要通过一个简单方法就可以将Dialog样式切换到指定布局方案。如下所示

//使用上图1的布局方案

new NormalDialog(getContext()).setCustomView(R.layout.layout_1).setTitle("删除").setContent("确定要删除所选的一个会话吗?").setPositiveText("删除").setNegativeText("取消").show();

//使用上图2的布局方案

new NormalDialog(getContext()).setCustomView(R.layout.layout_2).setTitle("账号在其他设备登陆").setContent("您的支付宝账号于...(内容过长遂省略)").setPositiveText("好的").setNegativeText("重置密码").show();

//使用上图3的布局方案

new NormalDialog(getContext()).setCustomView(R.layout.layout_3).setTitle("确定注销").setContent("确定注销当前账号?").setPositiveText("确定").setNegativeText("取消").show();

是的,FasterDialog的设计理念就是如此!每当我们有新的UI需求,保持代码层无需改动自行编写项目所需要的布局文件,通过设定不同的layout就可以将Dialog切换至不同的布局方案。这样具备极高的解耦性,也大大降低了代码维护成本。So,为了使程序员不再重复写百分之90的代码而专精于业务需求,设计了FasterDialog。

除此之外,FasterDialog还具备以下特性:

1.动态变化;即使在Dialog show出来以后,依然可以通过setTitle setXXX这样的方法动态改变Dialog中显示的内容

2.无需权限,无Activity环境弹窗

3.封装了一些Dialog常用但实现略微繁琐的方法;一个方法就可以让你的Dialog实现如 底部弹窗(是的,官方的BottomDialog被FasterDialog一个方法即可取代),顶部弹窗,宽高屏占比,最大宽高值,自动消失等功能

4.其他:链式调用、扩展预留


Dialog分类

在介绍分类之前,我们先翻阅官方AlertDialog的源码。给我的第一感受是功能冗杂,API繁多。明明有很多方法只能在特定场景下使用,放在子类更合适,但AlertDialog偏偏全都强行加了进去。首先从设计上来说不利于后续扩展,而且由于身兼多职也导致无法专精于某一个模块。

所以考虑到此,FasterDialog细分了各个模块的作用域,针对App上常见的Dialog类型进行了如下分类:

【FasterDialog】可能是Android上最好用的Dialog框架_第4张图片
LoadingDialog


【FasterDialog】可能是Android上最好用的Dialog框架_第5张图片
NormalDialog


【FasterDialog】可能是Android上最好用的Dialog框架_第6张图片
ImageDialog


【FasterDialog】可能是Android上最好用的Dialog框架_第7张图片
ProgressDialog


【FasterDialog】可能是Android上最好用的Dialog框架_第8张图片
ListDialog


【FasterDialog】可能是Android上最好用的Dialog框架_第9张图片
EditDialog

如上图所示,不同的Dialog专精于不同的模块,不会出现功能混杂的情况。当然,如果我制定的Dialog不满足你的项目需求,你也可以直接继承对应的Dialog,不需要大刀阔斧地修改,几分钟之内就可在项目中使用。

PS:再次强调,以上所有效果图仅为FasterDialog自带默认布局方案,除此之外FasterDialog还包含Meterail布局方案,你也可以自行编写xml布局,Dialog最终效果由你自己决定。


API

所有Dialog通用方法

BaseDialog dialog;        //所有Dialog均继承于BaseDialog,因此所有子类均可调用以下方法。

dialog.setCustomView()//设置弹窗的layoutID,默认已有

      .setWidth()//设置弹窗宽度(单位px)

      .setWidthWrap()//设置弹窗宽为内容包裹

      .setWidthMatch()//设置弹窗宽为填充屏幕

      .setWidthPercent()//设置弹窗宽度占屏幕宽度的百分比(取值范围0-1.0)

.setMaxWidth()//设置弹窗最大宽度(单位px)

      .setHeight()//设置弹窗高度(单位px)

.setHeightWrap()//设置弹窗高为内容包裹

      .setHeightMatch()//设置弹窗高为填充屏幕

.setHeightPercent()//设置弹窗宽度占屏幕高度的百分比(取值范围0-1.0)

      .setMaxHeight()//设置弹窗最大高度(单位px)

      .setX()//设置弹窗的横坐标

.setY()//设置弹窗的纵坐标

      .setPopupFromBottom()//设置弹窗从底部弹窗,并且沉在底部(仿MIUI)

      .setPopupFromTop()//设置弹窗从顶部弹窗,并且浮在顶部

      .setCancel()//设置弹窗是否可被取消

.setCancelOutside()//设置弹窗是否可点击外部空间后消失

      .setAutoDismissTime()//设置弹窗自动消失时间

      .setAnimatStyle()//设置弹窗的出现消失动画

      .setTag()//设置TAG

      .addOnCancelListener()//添加弹窗取消监听

.addOnDismissListener()//添加弹窗消失监听

      .addOnShowListener()//添加弹窗显示监听

      .show();    //显示

dialog.dismiss();//隐藏

LoadingDialog

LoadingDialog dialog = new LoadingDialog(this);

dialog.setLodingText("加载中...")//设置加载文字

          .show();

NormalDialog

NormalDialog dialog = new NormalDialog(this);

dialog

//            .setCustomView(NormalDialog.LAYOUT_XQ)      //默认布局方案

//            .setCustomView(NormalDialog.LAYOUT_METERAIL)//Meterail布局方案

//            .setCustomView(R.layout.yourlayout)    //设置你自己的布局方案

            .setIcon(0)        //设置图标,支持GIF图片

            .setTitle("标题")  //设置标题

            .setContent("内容") //设置内容

            .setPositiveText(NormalDialog.SURE) //设置确认文字

            .setPositiveListener(null)  //设置确认监听

            .setNegativeText(NormalDialog.CANCLE)//设置取消文字

            .setNegativeListener(null)  //设置取消监听

            .setNeutralText("其他")    //设置中立文字

            .setNeutralListener(null)  //设置中立监听

//            .setData()//一个方法即可设置以上所有内容

            .show();

ImageDialog

ImageDialog dialog = new ImageDialog(this);//ImageDialog继承于NormalDialog,可以使用NormalDialog的所有方法

dialog

//            .setCustomView(ImageDialog.LAYOUT_XQ)      //默认布局方案

//            .setCustomView(R.layout.yourlayout)    //设置你自己的布局方案

            .setIcon(0) //设置图标,支持GIF图片

            .setTitle("标题") //设置标题

            .setContent("内容") //设置内容

            .setPositiveText(NormalDialog.SURE) //设置确认文字

            .setPositiveListener(null) //设置确认监听

            .setNegativeText(NormalDialog.CANCLE)//设置取消文字

            .setNegativeListener(null) //设置取消监听

            .setNeutralText("其他") //设置中立文字

            .setNeutralListener(null) //设置中立监听

//          .setImageRes()  //设置大图的资源ID,与下方法不要同时使用

            .setImageUrl("http://t2.hddhhn.com/uploads/tu/201610/198/hkgip2b102z.jpg")  //设置大图的路径地址,支持本地图片的同时也支持网络图片,与上方法不要同时使用

//          .setData()//一个方法即可设置以上所有内容

//          .setDialogImageLoder()  //建议使用Glide或者其他图片加载器加载图片,默认加载器不提供三级缓存

            .show();

ProgressDialog

        ProgressDialog dialog = new ProgressDialog(this); //ProgressDialog与NormalDialog均继承于SimpleDialog,因此均可设置title,icon,content等属性

dialog

//            .setCustomView(ProgressDialog.LAYOUT_XQ)      //默认布局方案

//            .setCustomView(ProgressDialog.LAYOUT_METERAIL)      //Meterail布局方案

//            .setCustomView(R.layout.yourlayout)    //设置你自己的布局方案

            .setIcon(0)        //设置图标,支持GIF图片

            .setTitle("标题")  //设置标题

            .setContent("内容") //设置内容             

            .setProgress(50)      //设置进度值(范围0-100)

//                .setProgress(50,"正在删除 /System 文件夹中")//设置进度值+进度描述字符串

            .show();

待完善ListDialog与EditDialog

你可能感兴趣的:(【FasterDialog】可能是Android上最好用的Dialog框架)