Android LayoutInflater.inflate()方法参数详解


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


你可能感兴趣的:(Android)