Android 中LayoutInflater.inflate()方法的介绍
android 中layoutinflater.inflate()方法的介绍
最近一直想弄明白layoutinflater对象的inflate方法的用法,今天做了实例。
<linearlayout android:id="@+id/ll_item_group" android:layout_width="match_parent" android:layout_height="200dp" android:background="#ff0000" android:orientation="vertical" > </linearlayout>
itemgroup = (linearlayout) findviewbyid(r.id.ll_item_group);
这个作为itemgroup对象。
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <linearlayout android:id="@+id/view_content" android:layout_width="match_parent" android:layout_height="100dp" android:background="#4169e1" android:orientation="horizontal" > </linearlayout> <relativelayout android:id="@+id/view_todo" android:layout_width="100dp" android:layout_height="match_parent" android:background="#00008b" > </relativelayout> </linearlayout>
这个作为include引用的view。测试代码如下:(inflater是layoutinflater对象的实例,获取方法是:inflater = layoutinflater.from(this),其它两种方法自己百度)
view v1 = inflater.inflate(r.layout.el_include, null); view v3 = inflater.inflate(r.layout.el_include, itemgroup, false); view v2 = inflater.inflate(r.layout.el_include, itemgroup); view v4 = inflater.inflate(r.layout.el_include, itemgroup, true);
测试结果是:
1、v1和v3在activity里显示效果一样,都是itemgroup原来的内容,v1和v3都是r.layout.el_include里的view对象。
2、v2和v4在activity里显示效果一样,都是itemgroup添加r.layout.el_include里的内容之后的。v2和v4对象都是加了r.layout.el_include的itemgroup。
v2和v4在activity里显示效果一样说明itemgroup没有改变!
v2和v4在activity里显示效果一样说明itemgroup发生了改变,都是将r.layout.el_include里的内容添加到了itemgroup之后的view
那么merge和include的区别是:
include所引用的就是一个独立的view,而merge引用的view必须放到一个viewgroup中。如下例:
<merge xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <linearlayout android:id="@+id/view_content" android:layout_width="match_parent" android:layout_height="100dp" android:background="#4169e1" android:orientation="horizontal" > </linearlayout> <relativelayout android:id="@+id/view_todo" android:layout_width="100dp" android:layout_height="match_parent" android:background="#800080" > </relativelayout> </merge>
r.layout.el_marge 引用必须是这样的:
view v = inflater.inflate(r.layout.el_marge, itemgroup, true);
否则报错:<merge /> can be used only with a valid viewgroup root and attachtoroot=true
也就是说:merge是为了减少include里的根viewgroup,那么inflate的marge必须放到viewgroup中。
网上也有老说到marge和framelayout,其实我觉得没有联系。就是r.layout.el_marge若不添加一个viewgroup中的它里面的元素而已规则和framelayout一样。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!