当前位置: 移动技术网 > IT编程>移动开发>Android > Android 中LayoutInflater.inflate()方法的介绍

Android 中LayoutInflater.inflate()方法的介绍

2019年07月24日  | 移动技术网IT编程  | 我要评论

千拓股票网,斯诺克世锦赛2017赛程,师傅tv

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一样。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网