android在布局中动态增加view时的层级控制
问题:我们有时候希望动态的在android的布局中增加view,例如动态增加一个textview来显示数据为空,但是当布局较为复杂时,你希望把view加载特定的其他view的后面,这是要如何处理呢?
答案:
先看一个布局片段
<RelativeLayout android:id="@+id/baobei_gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal" > <GridView android:id="@+id/products" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="top|left" android:horizontalSpacing="6.53dp" android:listSelector="#00ffffff" android:numColumns="2" android:padding="6dp" android:scrollbars="none" android:scrollingCache="true" android:stretchMode="columnWidth" android:verticalSpacing="11.76dp" android:visibility="visible"> </GridView> <LinearLayout android:id="@+id/catalogContainer" android:layout_width="173dp" android:layout_height="177dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:background="@drawable/oms_catalog_bg" android:padding="3dp" android:visibility="gone" > <ListView android:id="@+id/catalogs" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="@null"> </ListView> </LinearLayout> </RelativeLayout>
该布局由relativelayout,girdview,linearlayout组成。relativelayou是其余2个布局的父容器。
接下来看下动态增加view的代码
if (emptyView == null) { emptyView = new TextView(context); emptyView.setText("没有搜索到结果"); LayoutParams emptyParam = new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); ((android.widget.RelativeLayout.LayoutParams) emptyParam) .addRule(RelativeLayout.CENTER_IN_PARENT); ((ViewGroup) baobeis.getParent()).addView(emptyView, 1, emptyParam); baobeis.setEmptyView(emptyView); }
该代码中的baobeis.getParent()指的就是relativelayout,当addview进去的时候,我们使用addView的一个构造方法
public void addView (View child, int index, ViewGroup.LayoutParams params)
这里最主要的参数就是index,标示的是希望将view增加到哪个view的下面。从刚才的布局代码片段看,以父布局relativelayout算起,
即
RelativeLayou index=0;
GridView index=1;
LinearLayout index=2;
你如果给index填写大于2的值将会报错。因为在当前父容器下,没有大于3的同级view
当然你还可以填写index=-1,-1的意思是,将view加到父容器中所有容器的最下面,也就是linearlayout的下面
如果你不能理解,那么你可以想下,这个css中,z-index有点象的。