我有一个线性布局,其中包括imageview和textview,一个在另一个线性布局。

<LinearLayout android:orientation="horizontal" ... >
 <ImageView 
     android:id="@+id/thumbnail"
     android:layout_weight="0.8" 
     android:layout_width="0dip"
     android:layout_height="fill_parent">
 </ImageView>
 <TextView 
    android:id="@+id/description"
    android:layout_weight="0.2"
    android:layout_width="0dip"
    android:layout_height="wrap_content">
 </TextView>

有些规则可能会丢失,这是为了给一个想法,如何布局。 我想要另一个小的文本视图,长度和宽度都是50dip,放在imageview上面,这里的over指的是z-index大于imageview,我想把它放在imageview的中心和上面(重叠)。

我想知道我们如何将一个视图置于另一个视图之上,具有不同的z索引(最好是线性布局)?


当前回答

我使用这个,如果你只希望在需要时将一个视图带到前面:

containerView.bringChildToFront(topView);

containerView是容器的视图要排序,topView是视图,我想有作为最顶端的容器。

对于要排列的多个视图,将要使用setChildrenDrawingOrderEnabled(true)和覆盖getChildDrawingOrder(int childCount, int i)如上所述。

其他回答

在RelativeLayout中试试这个:

ImageView image = new ImageView(this);
image.SetZ(float z);

这对我很管用。

你不能使用线性布局,但你可以使用框架布局。在FrameLayout中,z-index由添加项的顺序定义,例如:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/my_drawable"
        android:scaleType="fitCenter"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|center"
        android:padding="5dp"
        android:text="My Label"
        />
</FrameLayout>

在这个例子中,TextView将被绘制在ImageView的顶部,沿着图像的底部中心。

使用android: transformZ。它也适用于线性布局。

我通过添加android:elevation="1dp"来解决同样的问题,你想要它超过另一个视图。但是在5.0以下是无法显示的,而且会有一点阴影,如果你能接受就可以了。

所以,最正确的解决方案是@kcoppock说。

如果你以编程方式添加视图,你可以使用你的布局。addView(看来,1);

其中1是下标。