我需要在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>
答案 0 :(得分:35)
我偶然发现了这个问题,但是我在这里解决了这个问题。
当您使用具有高程的项目(例如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>
答案 1 :(得分:0)
通过更改背景将RelativeLayout作为按钮,并将TextView设置为centerInParent =&#34; True&#34;
<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
答案 2 :(得分:0)
添加此代码,它将解决您的问题。
android:stateListAnimator="@null"
Lollipop及更高版本中的按钮具有默认高度,这使得它们始终在顶部绘制。您可以通过覆盖默认的StateListAnimator来更改此项。
尝试将其放入按钮XML:
android:stateListAnimator="@null"
FrameLayout现在应该覆盖按钮。
答案 3 :(得分:0)
您不能为此使用LinearLayout,但是可以使用FrameLayout。在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"
/>
在这种情况下,TextView将沿着图像的底部中心绘制在ImageView的顶部。
答案 4 :(得分:-2)
首先放置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>