首先我们从activity中的oncreate中的setContentView()方法介绍:

在Window 抽象类中有三个setContentView的方法,Window类有是Activity的成员属性

PhoneWindow继承了Window 实现了setContentView方法, 在PhoneWindow类中还有内部类DecorView

DecorView继承了Framelayout 是一个具体现实View容器。

在PhoneWindow中实现setContentView具体方法:

(layoutResID){(==){installDecor()}(!hasFeature()){.removeAllViews()}(hasFeature()){ScenenewScene=Scene.(layoutResIDgetContext())transitionTo(newScene)}{.inflate(layoutResID)}Callbackcb=getCallback()(cb!=&&!isDestroyed()){cb.onContentChanged()}}

首先判断了mContentparent 是否为空,这个就是xml文件的根节点


mLayoutInflater.inflate(layoutResID, mContentParent);将我们的资源文件通过LayoutInflater对象转换为View树,并且添加至mContentParent视图中(其中mLayoutInflater是在PhoneWindow的构造函数中得到实例对象的LayoutInflater.from(context);)。

再来看下PhoneWindow类的setContentView(View view)方法和setContentView(View view, ViewGroup.LayoutParams params)方法源码:

(ViewviewViewGroup.LayoutParamsparams){(==){installDecor()}(!hasFeature()){.removeAllViews()}(hasFeature()){view.setLayoutParams(params)ScenenewScene=Scene(view)transitionTo(newScene)}{.addView(viewparams)}Callbackcb=getCallback()(cb!=&&!isDestroyed()){cb.onContentChanged()}}

直接分析setContentView(View view, ViewGroup.LayoutParams params)方法就行,可以看见该方法与setContentView(int layoutResID)类似,只是少了LayoutInflater将xml文件解析装换为View而已,这里直接使用View的addView方法追加道了当前mContentParent而已。

所以说在我们的应用程序里可以多次调用setContentView()来显示界面,因为会removeAllViews


我们先看一下源码中LayoutInflater实例化获取的方法

LayoutInflater(Contextcontext){LayoutInflaterLayoutInflater=(LayoutInflater)context.getSystemService(Context.)(LayoutInflater==){AssertionError()}LayoutInflater}
  • 获取LayoutInflater实例的三种方式:

  • // 方式1

  • // 调用Activity的getLayoutInflater()

  • LayoutInflater inflater = getLayoutInflater();

  • // 方式2

  • LayoutInflater inflater = LayoutInflater.from(context);

  • // 方式3

  • LayoutInflater inflater = LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);


更多相关文章

  1. android 4.0 USB Camera实例(二)应用层
  2. Android之MVVM架构指南(二):DataBinding
  3. Android中TextView显示插入的图片实现方法
  4. Android(安卓)Studio中AIDL使用方法
  5. Android(安卓)RxJava创建操作符Timer的方法
  6. 在Android(安卓)5.0中使用JobScheduler
  7. android -------- 安装APK报错:Installation error: INSTALL_FAIL
  8. android之在启动运用程序的时候彻底隐藏TitleBar
  9. Android(安卓)厘米转dip、px转dip 地图比例尺长度计算

随机推荐

  1. 百度地图 - Android所有Marker点显示在屏
  2. Android(安卓)获取OnItemClick事件中组件
  3. GBD调试谷歌拼音输入法准备工作
  4. Android(安卓)ACCESS_COARSE_LOCATION的
  5. Android(安卓)开发艺术探索笔记(18)
  6. 安卓串口中InputStream数据接收不完整
  7. ShutdownThread - 动画 & 音乐
  8. Android(安卓)进阶——代码插桩必知必会
  9. Android:图片不加载到内存获取图片的大小
  10. 程序代码删除联系人的分组