是这样的,看官
今天,我在掘金上摸鱼,突然微信一响(吓劳资一跳,我还以为我摸鱼被抓了),原来是一朋友问我个问题,问题是在Dialog的布局文件中宽高设置的match_parent不生效
既然比较闲,那就一起看看源码呗?
示例代码

为什么设置没生效?
是不是Android在哪设置了,导致没生效,还是手机问题(百试不爽的锅)?
从哪里开始看?
你问我从哪里看?看上面的代码,就一个setContentView方法,那就从这里看呗,其实研究过AC源码的,应该知道这个方法的奥妙了,那就当你没看过吧。
setContentView
这有三个setContentView方法,不多讲,用哪个,我们看哪个

mWindow在哪呢?
我们需要找这个mWindow,因为可以看到在这调用了setContentView(),然后在这个类中,慢慢找,找啊找 嘻嘻,在Dialog的构造方法找到了

new了一个PhoneWindow这个类,赋值给了mWindow,那我们是不是就要到PhoneWindow里面去看setContentView这个函数了?
PhoneWindow
在这函数中setContentView也有三个,老规矩,用哪个看哪个

installDecor()
第一次看源码,肯定是无从下手的,但是规范的命令方式,让你懂代码,哈哈,看源码,很好的学习方式哦。

generateDecor()创建DecorView,DecorView大家可以去了解一下,面试也会问到
generateLayout

- 那就有人问了,那你看到mIsFloating这个值没?
- 为什么这个设置的会导致到我们XML的设置,他们有啥关系?
mIsFloating
我们来看看这个值,谁给的?反正默认的是false。我找了很久,发现在Dialog构造方法里面有个默认的Theme,你可以去看看,这里我不贴代码了,你可以在themes.xml里看到!


哈哈哈哈,windowIsFloating 这不是mIsFloating设置吗?嗯嗯,为true,然后她就进去了,然后设置了WRAP_CONTENT, WRAP_CONTENT。
为什么这个设置会导致到我们XML的设置,他们有啥关系?
这个问题我们就要看生成的mContentParent了,你会发现他在setContentView中

小结
- 设置 false就可让match_parent生效
- 自定义设置Dialog的attributes
阅读源码,真的会比较枯燥,但是很打发时间,但是如果阅读源码,不记录点东西,那跟没读一样,好记性不如烂笔头
如果读的不对,要留言给我指出哦,我是个菜鸟,但有好学的心,加油!!!