BaseDialog
创建dialog的步骤
Builder.create大致步骤
- 根据上下文以及主题资源id创建AppCompatDialog对象,因为BaseDialog继承AppCompatDialog,所以mDialog实质上是AppCompatDialog的引用(目前),但他是BaseDialog类
- 设置布局资源
- 设置back键取消,设置框外点击取消
- 设置出现、取消、消失以及交互时(按下)的监听回调:将回调接口对象赋值给类内对于接口成员。设涉及了一堆监听包装类(轮子哥修复了内存泄露)
- 配置对话框所在的窗口
- 宽高、gravity、偏移量xy、窗口动画
- 设置窗口背景模糊属性、透明度
- 对话框生命周期与活动绑定
- 调用创建时回调
Bulider详细步骤解释
-
构造函数
-
给mDialog实例化:本质上就是调用BaseDialog的构造函数->原生AppCompatDialog构造函数
-
BaseDialog的构造函数:一种是生成默认主题资源的dialog,一个是生成根据themeId参数创建的dialog。两者都需要context参数(这是BaseDialog的构造函数)
-
-
配置内容视图
- 将配置好的内容视图(mContentView)设置给mDialog,mContentView在对应的set方法中进行配置
- 在这个set方法中对内容视图做了以下工作:调整宽高、重心
-
关于dialog取消的使能配置
- ”返回键可取消“设置
- 如果第一条为true,使能“点击外部取消dialog“
-
配置各种回调监听
- 这里的监听被封装成类,需要花精力研究
-
设置dialog所在窗口的各个属性
- 和上述一样,以下再重复一遍
- 宽高、gravity、偏移量xy、窗口动画
- 设置窗口背景模糊属性、透明度
-
子控件监听回调函数设置
- 感觉思路与Adapter中VH一样,添加了对监听类的包装,需要花时间研究
-
将 Dialog 的生命周期和 Activity 绑定在一起
- 花时间研究
-
启动创建时的回调OnCreateListener
- 调用其中onCreate(BaseDialog dialog)方法
-
返回配置好的mDialog
mDialog通过这个函数,对实例化、内容视图、点击取消性、各种监听回调、所在窗口属性、子控件监听、生命周期设置都做了配置
inflate(id, new FrameLayout(mContext), false)
-
生成一个id的视图控件,当为true时,该控件的父视图是第二个视图对象,否则第二个对象的作用仅仅是返回视图属性:比如宽高值
-
当为false时,对第二个参数选取的解释(ChatGPT):当
inflate()
方法的第三个参数为false
时,你可以使用任何有效的布局对象作为第二个参数,例如LinearLayout
或RelativeLayout
。这个参数的作用是提供一个上下文环境,用于解析布局文件中的视图属性,比如宽高值。它并不会影响最终生成的视图控件的类型或行为。所以你可以根据需要选择适合的布局对象作为第二个参数,只要它满足提供上下文环境的要求即可。