当前位置: 代码迷 >> Android >> android在格局中动态增加view时的层级控制
  详细解决方案

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

热度:94   发布时间:2016-04-28 06:27:58.0
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有点象的。

?

?

?

?

  相关解决方案