android自定义dialog
前言
在Android开发的过程中经常会遇到自定义Dialog的需求,Android原生的Dialog在很多情况下面并不能满足我们的使用,例如下图钉钉的更新弹窗,所以今天我们就来尝试下自定义Dialog。
自定义Dialog基类
自定义Dialog需要首先继承Dialog,重写onCreate(Bundle savedInstanceState)
方法,由于在项目中我们可能不止一次的使用自定义Dialog,所以我创建了一个简单的基类BaseDialog
,主要代码如下如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//添加布局文件
setContentView(getLayoutRes());
//执行初始化view,设置弹窗大小绑定view等
initView();
//初始化事件,例如添加点击事件
initEvent();
}
public abstract int getLayoutRes();
public abstract void initView();
public abstract void initEvent();
继承Dialog基类
在具体的使用的时候,需要继承BaseDialog
,在initView
里面记得添加设置dialog大小的熟悉!!
override fun initView() {
//点击空白可以隐藏弹窗
window?.setBackgroundDrawable(BitmapDrawable())
setCanceledOnTouchOutside(true)
//弹窗位置
window?.setGravity(Gravity.CENTER)
//设置大小
val params = window?.attributes // 获取对话框当前的参数值
params?.height = SysUtils.getScreenDisplay(context).height / 3
params?.width = SysUtils.getScreenDisplay(context).width
//设置背景的颜色
//params.dimAmount = 0.5f;
//设置属性
window?.attributes = params
}
最后
附上完整的BaseDialog的代码
public abstract class BaseDialog extends AppCompatDialog {
public BaseDialog(@NonNull Context context) {
super(context);
}
public BaseDialog(@NonNull Context context, @StyleRes int themeResId) {
super(context, themeResId);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutRes());
initView();
initEvent();
}
public abstract int getLayoutRes();
public abstract void initView();
public abstract void initEvent();
}