Android Dialog 为什么设置大小需要在 setContentView 方法之后

Dialog在Android中设置大小的关键在于WindowManager.LayoutParams的width和height属性。默认PhoneWindow的width和height为MATCH_PARENT,但setContentView后变为WRAP_CONTENT。原因是generateLayout方法中,如果mIsFloating为true,大小会被修改。mIsFloating从WindowStyle解析,R.styleable.Window的windowIsFloating默认为true,导致尺寸变化。因此,修改Dialog尺寸需在setContentView之后进行。
摘要由CSDN通过智能技术生成

Dialog设置大小为什么需要在setContentView方法之后?

Dialog设置大小实际也是通过 WindowManager.LayoutParams 中的width,height属性控制

但是我们看到Dialog内部关联的Window(PhoneWindow)的WindowManager.LayoutParams的width,heigh默认值都是MATCH_PARENT,可当我们setContentView之后就变成了WRAP_CONTENT了呢?带着疑问我们我们追踪源码

首先看到Dialog默认关联的Window

Dialog(@NonNull Context context, @StyleRes int themeResId, boolean createContextThemeWrapper) {
        //...省略
        final Window w = new PhoneWindow(mContext);
        //...省略
    }

PhoneWindow 继承Window

Window的WindowManager.LayoutParams默认构造(width,height都是 MATCH_PARENT)

接着在看为什么setContentView之后会变了呢


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值