最新版本的说明 都会在这里更新....
最新版本: V2.1.1
github地址: https://github.com/liys666666/LDialog
V1.0版本系列说明,请查看: https://www.jianshu.com/p/8eea6af1dd2a
一. 前言
为什么要封装这个框架呢? 我们目前自定义Dialog的常见方式有:
- 使用系统自带的.
优点: 快速、简单、粗暴.
缺点: 比较难看, 很多属性没法改, 灵活性非常差. - 使用第三方别人封装好的常见样式.
优点: 样式比系统好看, 快速, 总体比第1种好用.
缺点: 布局固定, 无法更改, 不够灵活 - 自定义CustomDialog 继承 Dialog, 然后在CustomDialog加载自己的布局, 封装自己的属性.
优点: 灵活性非常高, 任何弹窗都可以实现.
缺点: 写CustomDialog 比较麻烦, 时间上远超前面两种方式, 代码复用性不够强.
为了能自定义各种dialog, 又能把节约时间, 所以就出了这个框架
二. 2.0和1.0对比
V1.0版本是直接操作Window, 比如圆角, 背景等,由于Window是系统的, 所以属性受到一定的限制。
V2.0版本在Window上加了一个自定义View, 我们直接操作这个View就灵活多了, 属性可以自由扩展.
更新说明:
- 对象创建发生变化
- 新增:最大最小宽高
- 新增:颜色渐变
- 新增:分开设置四个角的圆角
- 新增:内置几种弹框动画
- 新增:setTextSize属性
- 优化:setCancelBtn() 可传多个ID
- 修复:setOnClickListener中的Id 覆盖 setCancelBtn()
三. 使用方法
1. 导入项目
//项目根目录下 build.gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' } //添加
}
}
dependencies {
implementation 'com.github.liys666666:LDialog:V2.1.2' //添加
}
2.所有属性
LDialog dialog = LDialog.newInstance(this, R.layout.dialog_confirm);
dialog
.setMaskValue(0.5f) //遮罩--透明度(0-1)
//1.设置宽
//精确宽度
.setWidth(100) //单位:dp
.setWidthPX(100) //单位:px
.setWidthRatio(0.8) //占屏幕宽比例
//最小宽度
.setMinWidth(100) //单位:dp
.setMinWidth(100) //单位:px
.setMinWidthRatio(0.5) //占屏幕宽比例
//最大宽度
.setMaxWidth(100) //单位:dp
.setMaxWidthPX(100) //单位:px
.setMaxWidthRatio(0.8) //占屏幕宽比例
//2.设置高
//精确高度
.setHeight(100) //单位:dp
.setHeightPX(100) //单位:px
.setHeightRatio(0.3) //占屏幕高比例
//最小高度
.setMinHeight(100) //单位:dp
.setMinHeightPX(100) //单位:px
.setMinHeightRatio(0.3) //占屏幕高比例
//最大高度
.setMaxHeight(100) //单位:dp
.setMaxHeightPX(100) //单位:px
.setMaxHeightRatio(0.3) //占屏幕高比例
//3.设置背景
//颜色
.setBgColor(Color.WHITE) //一种颜色
.setBgColor("#FFFFFF") //一种颜色
.setBgColor(GradientDrawable.Orientation.BOTTOM_TOP, Color.BLUE, Color.YELLOW) //颜色渐变(可传多个) 参数1:渐变的方向
.setBgColor(GradientDrawable.Orientation.BOTTOM_TOP, "#00FEE9", "#008EB4") //颜色渐变(可传多个)
.setBgColorRes(R.color.white) //一种颜色(res资源)
.setBgColorRes(GradientDrawable.Orientation.BOTTOM_TOP, R.color.colorAccent, R.color.colorPrimary) //颜色渐变(可传多个)
//圆角
.setBgRadius(5) //圆角, 单位:dp
.setBgRadius(5, 5, 0, 0) //圆角, 单位:dp
.setBgRadiusPX(10) //圆角, 单位:px
.setBgRadiusPX(10, 10, 10, 10) //圆角, 单位:px
//4.设置弹框位置
.setGravity(Gravity.LEFT | Gravity.BOTTOM) //弹框位置
.setGravity(Gravity.LEFT, 0, 0) //弹框位置(偏移量)
//5.设置动画
//5.1 内置动画(平移,从各个方向弹出)
// 对应的值:DEFAULT(渐变) (LEFT TOP RIGHT BOTTOM 平移) SCALE(缩放)
.setAnimations(LAnimationsType.LEFT)
//5.2 自定义动画
.setAnimationsStyle(R.style.li_dialog_default) //设置动画
//6.设置具体布局
//6.1 常见系统View属性
.setText(R.id.tv_title, "确定")
.setTextColor()
.setTextSize()
.setTextSizePX()
.setBackgroundColor()
.setBackgroundRes()
.setImageBitmap()
.setVisible()
.setGone()
//6.2 其它属性
.setOnTouchOutside(true) //点击空白消失
.setCancelBtn(R.id.tv_cancel, R.id.tv_confirm) //设置按钮,点击弹框消失(可以传多个)
.setOnClickListener(new LDialog.DialogOnClickListener() { //设置按钮监听
@Override
public void onClick(View v, LDialog customDialog) {
customDialog.dismiss();
}
}, R.id.tv_confirm, R.id.tv_cancel) //可以传多个
.show();
3. 补充说明
①:如果自定义View的属性需要动态设置怎么办?
MyView view = getView(@IdRes int viewId)
view.set属性
②. 使用内置的动画, setAnimations(), 对应的值如下:
对应的值 | 说明 |
---|---|
LAnimationsType.DEFAULT | 渐变 |
LAnimationsType.LEFT | 从左往右平移 |
LAnimationsType.TOP | 从上往下平移 |
LAnimationsType.RIGHT | 从又往左平移 |
LAnimationsType.BOTTOM | 从下往上平移 |
LAnimationsType.SCALE | 缩放 |
自定义动画时间方法:(动画默认时间是: 200毫秒)
在res/values/strings.xml设置:
<!-- 动画时间(单位:毫秒)-->
<string name="li_dialog_duration_default">200</string>
<string name="li_dialog_duration_scale">200</string>
<string name="li_dialog_duration_left">200</string>
<string name="li_dialog_duration_top">200</string>
<string name="li_dialog_duration_right">200</string>
<string name="li_dialog_duration_bottom">200</string>
③. 自定义动画, setAnimationsStyle, 需要在res/values/styles.xml 设置, 动画属性参考: android动画《一》补间动画
<style name="li_dialog_default" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/li_dialog_default_show</item> <!--显示动画-->
<item name="android:windowExitAnimation">@anim/li_dialog_default_cancel</item> <!--消失动画-->
</style>
四. 总结:
1. 扩展性强. 这个框架只是一个盒子, 里面都是空的, 喜欢放什么样的布局完全看个人喜欢, 可进行二次封装成自己喜欢的样式.
2. 使用方便. 链式调用, 属性明了, 不记得一查就可以了.
3. 学习成本低, 只需设置属性即可, 其它完全不用管