问题背景:
1.自定义Dialog
2.创建了BaseDialog(因为Dialog比较多), 在BaseDialog中设置window的宽高/ 位置等
window?.appl{
clearFlags(xxx)
setWindowAnimations(xxx)
}?.run{
attributes
}?.apply{
flags = xxx
width = WindowManager.LayoutParams.MATCH_PARENT
height = WindowManager.LayoutParams.MATCH_PARENT
x = 0
y = 0
gravity = Gravity.BOTTOM and Gravity.CENTER_HORIZONTAL
}
3.添加了 DataBinding, 使用setContentView(binding.root)
导致问题:
子Dialog布局的xml中根Layout的宽高失效.
分析:
经过分析, 发现 binding.root的返回值是view, 而我们一般使用的是int类型xml布局(R.layout.xxx)
setContentView(view): 直接decoreView.addView,自动创建params(MATCH_PARENT)
setContentView(int): 解析xml文件中的宽高等设置
而设置setContentView其实是DecoreView去addView, 而DecoreView是继承Framelayout, 他的MeasureSpec的mode是AT_MOST, 那么view在绘制的时候, MATCH_PARENT和WRAP_CONTENT后续的实现方式是一样的.
解决办法:
将自己的布局设置成一个全屏的界面.
原来的界面大小就是dialog大小, 现在做成全屏大小, 因为设置了window的透明度, 所以这个问题暂时解决, 是否还有别得更优雅的办法, 敬请期待!!!