相对布局中的z-index

Evg*_*kov 17 android z-index android-relativelayout

我需要在RelativeLayout中的Button上方放置一个TextView.但它不起作用:TextView总是在Button下,即使我在按钮之前移动它.我也尝试过bringChildToFront()在前面移动textview的功能,但没有运气.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rlBottom"
android:layout_width="fill_parent"
android:layout_height="match_parent">

<Button
    android:id="@+id/bVio"
    android:layout_width="wrap_content"
    android:layout_height="50dip"
    android:layout_alignParentLeft="true"
    android:text="VIO"></Button>

    <TextView
        android:id="@+id/bVio_count"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/bVio"
        android:layout_marginTop="6dip"
        android:layout_marginRight="6dip"
        android:text="00"
        android:textSize="15dip"
        android:textColor="#FF0000"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

lej*_*onl 38

我偶然发现了这个问题,但是我在这里解决了这个问题.

当您使用具有高程的项目(例如Button)时,问题出现在具有API级别21(Lollipop/Android 5.0)及更高级别的Android上.

在Lollipop设备上订购布局时,Android会查看XML中项目的顺序.项目在XML中越往下,它在Z-index中越高.因此,如果您首先放置Button并将TextField放在它下面,它将起作用.

但是,在使用Android 21以上的设备上决定z-index的顺序时,系统还会查看项目高程,并在具有较低高程值的项目之上呈现具有较高高程值的项目.因此,要使您的设计正常工作,您必须确保TextField的高度高于Button,您可以通过定义android:elevation项目来实现.下面的模拟XML适用于API级别21之前和之后的设备:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rlBottom"
    android:layout_width="fill_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/bVio"
        android:layout_width="wrap_content"
        android:layout_height="50dip"
        android:layout_alignParentLeft="true"
        android:text="VIO"
        android:elevation="0dp"
        />

    <TextView
        android:id="@+id/bVio_count"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/bVio"
        android:layout_marginTop="6dip"
        android:layout_marginRight="6dip"
        android:text="00"
        android:textSize="15dip"
        android:textColor="#FF0000"
        android:elevation="10dp"
        />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

  • 我尝试添加`android:elevation ="1dp"`和`android:translationZ ="1dp"`它解决了marshmallow和nougat中的问题.谢谢! (4认同)
  • 我认为这应该是最好的答案.高程肯定是决定z顺序. (3认同)

小智 -1

首先放置 TextView,然后为按钮应用 layout_below:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rlBottom"
    android:layout_width="fill_parent"
    android:layout_height="match_parent">

        <TextView
            android:id="@+id/bVio_count"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignRight="@+id/bVio"
            android:layout_marginTop="6dip"
            android:layout_marginRight="6dip"
            android:text="00"
            android:textSize="15dip"
            android:textColor="#FF0000"/>

        <Button
            android:id="@+id/bVio"
            android:layout_width="wrap_content"
            android:layout_height="50dip"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/bVio_count"
            android:text="VIO"/>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)