`

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

 

 

 

 

分享到:
评论

相关推荐

    Android代码-Android上的一个蛛网评分控件

    在布局中使用声明 SpiderWebScoreView 和 CircularLayout,如下: 详解: SpiderWebScoreView 用来显示蛛网图形 CircularLayout 用来显示四周的文案 CircularLayout 的 尺寸 必须和 SpiderWebScoreVi

    SwissArmyKnife-android免root兼容所有版本ui调试工具.zip

    写完自定义的Canvas后还需要在OperatorView布局中加入布局代码,用于开启自定义的Canvas,比如在布局中加入开关按钮,并为按钮添加监听,开启后调用 CanvasManager.getInstance(getContext()).addCanvas(new 你的...

    Android移动开发实验6.doc

    " "(4)创建DetailActivity,并重写它的onCreate()方法和onCreatOptionsM" "enu()方法,并且在onCreated()方法中,添加代码控制导航图标的显示; " "(5)重写onOptionsItemSelected()方法,实现通过调用NavUtils....

    android群雄传

    7.3 Android布局动画 171 7.4 Interpolators(插值器) 171 7.5 自定义动画 172 7.6 Android 5.X SVG矢量动画机制 175 7.6.1 标签 175 7.6.2 SVG常用指令 176 7.6.3 SVG编辑器 177 7.6.4 Android中使用SVG ...

    Android代码-实现高性能微信朋友圈。

    减少布局层级,避免过多的Item View的无用布局嵌套。 对于有图片的列表,要在滑动时对图片加以控制,即滑动时不加载图片,停止滑动之后再加载图片。 应当避免在Adapter的填充数据时做过多的计算,或者嵌套过多的逻辑...

    Android代码-TouchEventBus

    &gt; Android 系统的触摸事件分发总是从父布局开始分发,从最顶层的子 View 开始处理,这种特性有时候会限制了我们一些很复杂的交互设计。 &gt; &gt; TouchEventBus 致力于解决非嵌套的滑动冲突,比如多个 在同一层级 的...

    浅析安卓(Android)的性能优化

    Android性能的优化主要分为两点 1、布局优化 2、内存优化 布局优化 首先来看一下布局优化,系统在渲染UI的时候会消耗大量的资源,所以,对布局的优化就显得尤...在Android系统中,系统对View进行测量、布局、绘制的时

    Android性能优化方法

     •优化ImageView:对于先绘制了一个背景,然后在其上绘制了图片的,9-patch格式的背景图中间拉伸部分设置为透明的,Android 2D渲染引擎会优化9-patch图中的透明像素。这个简单的修改可以消除头像上的过度绘制。  ...

    wxml2canvas微信根据wxml绘制海报

    ##根据wx.createSelectorQuery()获取wxml...3.data-change-top设置字在view布局的高度,可根据手机平台设置 部分机型ios高度比android略高 ##wx.createCanvasContext绘制海报,而不是canvas2d绘制海报,海报高度没限制

    Android仿饿了么加入购物车旋转控件自带闪转腾挪动画的按钮效果(实例详解)

    概述 在上文,酷炫Path动画已经预告了,今天给大家带来的是利用 纯... 1 减少布局层级,从而提高性能 2 文字和图形纯draw,用到什么draw什么,没有其他的额外工作,也间接提高性能。 3 纯自定义View难度更高,更有

    Android利用ConstraintLayout实现漂亮的动画详解

    ConstrainLayout可以使View层级扁平化,提升性能,支持任意的边框,其目的就是修复之前layout的一些短板。其实ConstrainLayout还有一个大多数人没有注意到的特性:可以利用Constrainlayout快速构建漂亮的动画效果。 ...

    TouchEventBus:一种处理嵌套和非嵌套滑动冲突的解决方案

    滑动冲突解决方案非嵌套滑动 | Android 系统的触摸事件分发总是从父布局开始分发,从最顶层的子 View 开始处理,这种特性有时候会限制了我们一些很复杂的交互设计。TouchEventBus 致力于解决非嵌套的滑动冲突,比如...

Global site tag (gtag.js) - Google Analytics