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

本文介绍了在Android布局中动态增加View时如何控制其层级。通过示例代码展示了如何利用`addView`方法的`index`参数,将新View添加到特定位置,如在GridView下方,以及设置`index=-1`将View置于所有已有View之下。同时,将这一概念与CSS的z-index进行了类比,帮助理解View的层级关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

答案:

先看一个布局片段:

Xml代码

db2b449c97f52110b51be88b5253f73a.png

android:id="@+id/baobei_gridview"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center_horizontal" >

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">

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" >

android:id="@+id/catalogs"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:scrollbars="@null">

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

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

Java代码

db2b449c97f52110b51be88b5253f73a.png

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 voidaddView (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有点象的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值