关于LayoutInflater的总结

2018-03-26  本文已影响24人  启灵Alex

1.LayoutInflater和findViewById的区别

首先findviewbyid是用在xml布局中寻找组件实例化的
而LayoutInflater是用来加载xml布局实例化的

在很多实际开发中经常用到Inflater,例如listview等需要adapter适配器的时候。

2.获得LayoutInflater实例的方法

 LayoutInflater inflater = getLayoutInflater();
 LayoutInflater inflater = LayoutInflater.from(context);
 LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

第一种方法是通过调用activity的getLayoutInflater()获取,第二种方法通过传入的上下文获取,第三种是通过服务service获取。但是我看到在网上有的博客中写到第一二种方法实际上是调用第三种方法,这里我没有去深究。

3.LayoutInflater的inflater方法

inflater(int layoutId,ViewGroup root);
inflater(int layoutId,ViewGroup root,boolean attachToRoot);

第一个参数指向要加载的布局资源,第二个参数是Inflater的资源关联到那个具有层次结构的根视图上,当第三个参数存在的时候,它决定是否将Inflater的视图关联到提供的根视图上。

另外需要注意点是(整理网传):

  1. 如果root为null,attachToRoot将失去作用,布局文件设置任何值都将失效。(返回值是items的跟布局,属性未生效且未添加到父容器)

  2. 如果root不为null,attachToRoot设为true,则会给加载的布局文件的指定一个父布局,即root。(返回值是已添加items并属性均生效的父容器布局root)

  3. 如果root不为null,attachToRoot设为false,则会将布局文件最外层的所有layout属性进行设置,当该view被添加到父view当中时,这些layout属性会自动生效。(返回值是items的跟布局,属性均生效但未添加到父容器)

  4. 在不设置attachToRoot参数的情况下,如果root不为null,attachToRoot参数默认为true。

上一篇下一篇

猜你喜欢

热点阅读