android view dialog,浅析Android Dialog中setContentView()方法

概述

Dialog在Android中是一个很优秀的工具。在使用Dialog时,我们一般都会自定义要显示的内容布局。Dialog自带了三个方法来支持自定义内容布局。

public void setContentView (int layoutResID);

public void setContentView (View view);

public void setContentView (View view, ViewGroup.LayoutParams params);

这三个方法内部的实现原理都是一样的,只是其封装深度不同而已。三个方法可以说分别照顾了不同定制深度的开发者。

setContentView()流程

直接查看Dialog的源代码,如下图1所示。

0b54ce6a4e3c547da6cd5cc2c6fc4eff.png

【图1】

上图中mWindow在Dialog类中的定义如下:

import android.view.Window;

Window mWindow;

那么,它从何而来呢?如下图2所示。

93a8b1c5880c0bcf5b4e6d417ac1f71a.png

【图2】

由上图2可知,在构造Dialog对象时,这个mWindow的值也被确定。它由PolicyManager提供。再往下跟系统代码。

makeNewWindow(Context)方法的实现如下:

// The static methods to spawn new policy-specific objects

public static Window makeNewWindow(Context context) {

return sPolicy.makeNewWindow(context);

}

还得继续往下跟。

import com.andorid.policy.internal.policy.impl.Policy;

/**

* {@hide}

*/

public class Policy implements IPolicy {

//...

public Window makeNewWindow(Context context) {

return new PhoneWindow(context);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值