会调用phoneWindow的setContentView方法如下:
public void setContentView(int layoutResID) {
if (mContentParent == null) {
installDecor();
}
...
mLayoutInflater.inflate(layoutResID, mContentParent);
....
}
首先如果没有decorview会先创建DecorView, 然后通过LayoutInflater加载xml布局,将布局view add到 decorView上, 最后在Activity onResume的时候,会通过WindowManager添加decorView到window,并设置为VISIABLE。
我们知道Activity中的PhoneWindow对象帮我们创建了一个PhoneWindow内部类DecorView(父类为FrameLayout)窗口顶层视图,
然后通过LayoutInflater将xml内容布局解析成View树形结构添加到DecorView顶层视图中id为content的FrameLayout父容器上面。到此,我们已经知道Activity的content内容布局最终
会添加到DecorView窗口顶层视图上面
网友评论