`

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

 

 

 

 

分享到:
评论

相关推荐

    view android 切换动态增加

    在Android开发中,动态地添加或切换View是一个常见的需求,比如在创建自定义布局、实现复杂的用户交互或者在运行时根据用户操作动态调整界面时。本文将深入探讨如何在Android中实现动态增加View,并结合实际的项目...

    安卓动态控制叠放层级.zip

    总结来说,Android中动态控制叠放层级是一项重要的UI设计技巧,它可以增强用户体验,创建出更丰富的交互效果。开发者可以通过调用`bringToFront()`、`requestLayout()`、`setZOrderOnTop()`等方法,以及利用`...

    android 动画被父布局遮盖问题解决1

    然而,有时候在实现动画过程中,我们可能会遇到这样一个问题:当一个View执行动画并移出其父布局时,它会被父布局自动裁剪,导致动画效果不完整。这个问题在标题“android 动画被父布局遮盖问题解决1”中被提及,并...

    Android 卡片层叠式可动态切换布局-IT计算机-毕业设计.zip

    本项目提供的"Android 卡片层叠式可动态切换布局"是一个完整的源码示例,旨在帮助学习者理解如何在Android应用中实现这一功能。源码通常包括了Activity、Fragment、Adapter以及自定义View等关键组件,通过这些组件的...

    Android代码-SurfaceView添加组件view不被组件覆盖.zip

    3. **编程方式调整层级**:除了在XML中设置,也可以在代码中动态调整组件的层级。使用`View.bringToFront()`方法可以将指定的View移动到其父视图的最前面。但请注意,SurfaceView的特殊性可能需要额外处理,因为它有...

    Android SurfaceView添加组件view不被组件覆盖.zip

    在Android开发中,SurfaceView是一种特殊的视图,它允许开发者创建高性能的图形界面,比如游戏、视频播放等需要频繁更新画面的应用。SurfaceView有一个特点,就是它的内容在窗口的最顶层,通常不会被其他普通View...

    如何让安卓(Android)子控件超出父控件的范围显示

    在Android开发中,有时我们需要设计布局时,让子控件的部分内容超出其父控件的边界,以实现某些特殊的视觉效果或交互体验。例如,一个底部导航栏可能需要部分悬停在屏幕下方,或者一个按钮需要延伸到屏幕边缘。本篇...

    Android树形层级ListView

    此外,考虑到性能优化,你可能需要实现ListView的HeaderView和FooterView,以便在需要时动态添加和移除,避免一次性加载大量数据导致的性能问题。你还可以使用ViewHolder模式来缓存视图,减少 findViewById 的调用,...

    Android开发——布局管理

    本文将深入探讨Android布局管理的基本概念、常用布局类型以及如何优化布局性能。 首先,Android提供了几种内置的布局类型,以满足不同设计需求: 1. **线性布局(LinearLayout)**:这是最基础的布局,支持水平或...

    android 获取界面部分view,view截图,生成bitmap图片

    在Android开发中,有时我们需要对应用的某个特定View进行截图并保存或分享,例如用户希望分享当前活动的状态或者游戏得分。这个过程涉及到的关键知识点包括View的层级结构、Bitmap的生成与处理以及图片的保存和合成...

    Android 任意层级 树形控件

    例如,我们可以定义一个根节点,然后在代码中动态添加子节点,并根据数据模型设置它们的状态。 对于任意层级的树形控件,关键在于数据结构的设计和遍历算法。一种常见的数据结构是使用链表或树形数据结构来表示节点...

    Android阴影布局

    在XML布局文件中,可以使用`android:elevation`属性为View添加阴影。自Android Lollipop (API level 21)开始,这个属性被引入,它允许开发者为View添加Z轴上的层级,从而产生阴影。例如: ```xml android:layout_...

    Android 布局优化

    本文将深入探讨如何利用`include`、`ViewStub`和`merge`标签进行Android布局优化。 首先,`include`标签是一种强大的布局重用机制。在大型应用中,往往有许多相似或重复的布局元素,如导航栏、头部视图等。通过`...

    android布局案例源代码

    这个“android布局案例源代码”压缩包包含了一系列的示例,帮助开发者深入理解并掌握Android布局设计。以下是这些案例中可能涉及的一些关键知识点: 1. **树形布局(TreeView)**: 树形布局是一种层次结构的展示...

    Android布局控件之linearlayout案例

    在Android开发中,LinearLayout是一种非常基础且常用的布局控件,它是Android SDK提供的布局管理器之一。本教程将深入探讨LinearLayout的使用,通过实际案例来帮助理解其工作原理和功能。 线性布局(LinearLayout)...

    Android源码——SurfaceView添加组件view不被组件覆盖.zip

    3. 使用`ViewGroup`:将SurfaceView和其他View放在同一个自定义的`ViewGroup`中,通过重写`onLayout()`方法来控制子视图的布局。在该方法中,我们可以精确地指定每个子视图的位置,确保它们不会被SurfaceView覆盖。 ...

    android界面布局工具以及资料

    在Android应用开发中,UI(用户界面)设计是至关重要的,因为它直接影响到用户的体验和对应用的第一印象。本文将深入探讨Android界面布局工具及其相关资料,帮助开发者们创建美观、功能丰富的用户界面。 首先,我们...

    Android Framelayout显示静态和动态的扑克牌

    为了实现这个功能,开发者可能需要了解XML布局文件的编写,包括`Framelayout`的属性设置,以及如何在代码中动态添加和控制View。同时,他们还需要理解`Handler`和`Timer`的工作原理,以及如何正确地使用它们来协调...

    Android SurfaceView添加组件view不被组件覆盖.rar

    2. **调整Z轴顺序**:在Android中,View的绘制顺序由它们在布局文件中的顺序决定,后面的View会覆盖前面的View。因此,你可以尝试调整View在XML布局文件中的顺序,确保需要显示在SurfaceView上面的组件位于...

    android Activity布局初步(三)- 相对布局

    当我们在一个父布局中包含另一个布局时,通常会增加布局层次,而`&lt;merge&gt;`可以消除这种额外的层级,减少绘制时间。 通过以上知识点,我们可以理解相对布局的强大之处。然而,需要注意的是,过度依赖相对布局可能...

Global site tag (gtag.js) - Google Analytics