android在布局中动态增加view时的层级控制

来源:互联网 发布:阿里巴巴比淘宝便宜 编辑:程序博客网 时间:2024/06/09 22:38

问题:我们有时候希望动态的在android的布局中增加view,例如动态增加一个textview来显示数据为空,但是当布局较为复杂时,你希望把view加载特定的其他view的后面,这是要如何处理呢?

答案:

先看一个布局片段

Xml代码  收藏代码
  1. <RelativeLayout  
  2.          android:id="@+id/baobei_gridview"  
  3.          android:layout_width="fill_parent"  
  4.          android:layout_height="fill_parent"  
  5.          android:gravity="center_horizontal" >  
  6.   
  7.          <GridView  
  8.              android:id="@+id/products"  
  9.              android:layout_width="match_parent"  
  10.              android:layout_height="match_parent"  
  11.              android:gravity="top|left"  
  12.              android:horizontalSpacing="6.53dp"  
  13.              android:listSelector="#00ffffff"  
  14.              android:numColumns="2"  
  15.              android:padding="6dp"  
  16.              android:scrollbars="none"  
  17.              android:scrollingCache="true"  
  18.              android:stretchMode="columnWidth"  
  19.              android:verticalSpacing="11.76dp"   
  20.              android:visibility="visible">  
  21.          </GridView>  
  22.            
  23.          <LinearLayout  
  24.              android:id="@+id/catalogContainer"  
  25.              android:layout_width="173dp"  
  26.              android:layout_height="177dp"  
  27.              android:layout_alignParentTop="true"  
  28.              android:layout_centerHorizontal="true"  
  29.              android:background="@drawable/oms_catalog_bg"  
  30.              android:padding="3dp"  
  31.              android:visibility="gone" >  
  32.              <ListView  
  33.                  android:id="@+id/catalogs"  
  34.                  android:layout_width="match_parent"  
  35.                  android:layout_height="match_parent"   
  36.                  android:scrollbars="@null">  
  37.              </ListView>  
  38.          </LinearLayout>  
  39.   
  40.          
  41.      </RelativeLayout>  

 

该布局由relativelayout,girdview,linearlayout组成。relativelayou是其余2个布局的父容器。

 

接下来看下动态增加view的代码

Java代码  收藏代码
  1. if (emptyView == null) {  
  2.                         emptyView = new TextView(context);  
  3.                         emptyView.setText("没有搜索到结果");  
  4.                         LayoutParams emptyParam = new RelativeLayout.LayoutParams(  
  5.                                 LayoutParams.WRAP_CONTENT,  
  6.                                 LayoutParams.WRAP_CONTENT);  
  7.                         ((android.widget.RelativeLayout.LayoutParams) emptyParam)  
  8.                                 .addRule(RelativeLayout.CENTER_IN_PARENT);  
  9.                         ((ViewGroup) baobeis.getParent()).addView(emptyView, 1,  
  10.                                 emptyParam);  
  11.                         baobeis.setEmptyView(emptyView);  
  12.                     }  

 

该代码中的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有点象的。

阅读全文
0 0