android 相对布局中的z索引

fjaof16o  于 2023-02-20  发布在  Android
关注(0)|答案(5)|浏览(144)

我需要在RelativeLayout中的按钮上方放置一个TextView。但它不起作用:TextView总是在按钮下面,即使我把它移到按钮前面。我也试过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>
j2qf4p5b

j2qf4p5b1#

在API级别为21(Lollipop/Android 5.0)及更高级别的Android上,当您使用具有提升的项目(如按钮)时,会出现此问题。
在之前的Lollipop设备上排序布局时,Android将查看XML中项目的顺序。项目在XML中的位置越靠下,在Z索引中的位置就越靠上。因此,如果您将Button放在第一位,并将TextField放在其下方,它将起作用。
但是,在API 21以上的Android设备上决定z索引的顺序时,系统还会查看项目的高度,并将具有较高高度值的项目呈现在具有较低高度值的项目之上。因此,要使设计工作,您必须确保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>
u5rb5r59

u5rb5r592#

通过更改背景并将TextView设置为centerInParent=“True”将RelativeLayout作为按钮

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

    <TextView
        android:id="@+id/bVio_count"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="I am khan "
        android:textColor="#FF0000"
        android:textSize="35dip" />

</RelativeLayout>

班级

(RelativeLayout)findViewById(R.id.rlBottom).setOnClick(new OnClick... //like a button
8hhllhi2

8hhllhi23#

添加此代码,它将解决您的问题。

android:stateListAnimator="@null"

参考this answer
Lollipop和更高版本中的按钮有默认的高度,这使得它们总是在顶部绘制。您可以通过重写默认的StateListAnimator来更改此设置。
试着把这个放到你的按钮XML中:

android:stateListAnimator="@null"

FrameLayout现在应该覆盖按钮。

yqlxgs2m

yqlxgs2m4#

对此不能使用LinearLayout,但可以使用FrameLayout。在FrameLayout中,Z轴由添加项的顺序定义,例如:

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

在此示例中,TextView将绘制在ImageView的顶部,沿着图像的底部中心。

slwdgvem

slwdgvem5#

首先放置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>

相关问题