对话框是Android比较常用的UI了,由于对话框的依赖库特别多,特别杂,每个项目所使用的的依赖库有所区别,主要有两点区别较大:(1)对话框的导包,从android.app,到support v4,support v7,v11,v17,android.appcompat,最后到androidx.appcompat;(2)样式的变化,对话框在初始化时,也许会传递一个默认的样式,随着Android版本的迭代,一些老一点的样式已被废弃,导致版本不兼容;本文主要基于androidx的AlertDialog讲解。
如图所示的对话框,原生的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
方法最终显示对话框。
我们来看一下这张图:
假设我们需要做成上图样子的对话框,那么直接使用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();
效果如下:
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();
效果如下:
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();
效果如下:
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();
效果如下:
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();
效果如下:
[本章完...]