LayoutInflater.inflate()的作用就是将一个xml定义的布局文件实例化为view控件对象;


1.三个参数的inflate方法


LayoutInflater类inflate(int resource, ViewGroup root, boolean attachToRoot)方法三个参数的含义

resource:需要加载布局文件的id,意思是需要将这个布局文件中加载到Activity中来操作。

root:需要附加到resource资源文件的根控件,什么意思呢,就是inflate()会返回一个View对象,如果第三个参数attachToRoot为true,就将这个root作为根对象返回,否则仅仅将这个root对象的LayoutParams属性附加到resource对象的根布局对象上,也就是布局文件resource的最外层的View上,比如是一个LinearLayout或者其它的Layout对象。

attachToRoot:是否将root附加到布局文件的根视图上


网上查到的更多的是上述的结果(蓝色字体),看了之后还是一脸不懂。那是因为你还缺少一些知识

    我们在开发的过程中给控件所指定的layout_width和layout_height到底是什么意思?该属性的表示一个控件在容器中的大小,就是说这个控件必须在容器中,这个属性才有意义,否则无意义。这就意味着如果我直接将linearlayout加载进来而不给它指定一个父布局,则inflate布局的根节点的layout_width和layout_height属性将会失效(因为这个时候linearlayout将不处于任何容器中,那么它的根节点的宽高自然会失效)。


所以:

当root!=null && attachToRoot == true时,给布局resource指定了父视图root(resource生成的视图自动添加到root视图中),并且resource的根节点布局参数生效

 当root!=null && attachToRoot == false时,仅仅使resource的根节点布局参数生效,不指定父视图root,此时root的作用只是协助使resource的根节点布局参数生效

 当root==null 时,resource的根节点布局参数不会生效 (根节点布局参数是根节点以layout开头的属性参数),但是根节点的其他非布局参数还是会生效的,比如背景


2.两个参数的inflate方法

两个参数的inflate方法就很简单了,我们来稍微看一点点源码:
  1. public View inflate(XmlPullParser parser, @Nullable ViewGroup root) {  
  2.         return inflate(parser, root, root != null);  
  3.     }  

更多案例和细节请参考 http://blog.csdn.net/u012702547/article/details/52628453


更多相关文章

  1. Android入门:搭建环境、工程目录剖析、Activity生命周期
  2. Android布局_LinearLayout布局
  3. [Android]Fragment的应用/点击替换fragment应用实例
  4. uevent拔插事件分析--基于imx8
  5. android Intent和菜单的使用
  6. android 右上角menu创建设置
  7. 给其他布局文件的控件添加监听事件
  8. Android中两个Activity之间的跳转
  9. Android(安卓)OpenCV(四):绘制几何图形

随机推荐

  1. Android开发SDK版本号和API level对照表,
  2. android 开发环境配置
  3. Android中PopupWindow自定义坐标实现
  4. android实现简单的画画板
  5. 转Android(安卓)安全攻防(一):SEAndroid的编
  6. Android的线程使用来更新UI----Thread、H
  7. Android(安卓)动画学习笔记
  8. Android中TabLayout添加小红点
  9. Android官方命令深入分析之Hierarchy Vie
  10. Android与JavaScrpit相互调用