Android相对布局:ToLeftOf去了视图

时间:2014-08-20 09:00:53

标签: android android-relativelayout

我有一个相对布局,左边有一个TextView,右边有一个微调器。此外,我需要一个错误图像来显示用户是否选择了不正确的变体。

 <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:gravity="center_vertical"
            android:text="@string/some_text"/>
        <Spinner
            android:id="@+id/spinner"
            android:layout_width="74dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/err"/>
        <ImageView

            android:id="@+id/err"
            android:layout_centerVertical="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:src="@drawable/ic_error"/>
    </RelativeLayout>

当错误未显示(visibility = GONE)时,我希望我的微调器在右侧对齐,并在错误可见时将其移动到错误图像的左侧。我怎么做?现在它忽略了这一点:

android:layout_toLeftOf="@+id/err"
编辑:谢谢,我纠正了错字,但这不是问题的原因

4 个答案:

答案 0 :(得分:5)

也许你想要这样的东西:

<LinearLayout 
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:gravity="center_vertical|right"
     android:layout_alignParentRight="true"
     android:orientation="horizontal" >

     <Spinner
        android:id="@+id/spinner"
        android:layout_width="74dp"
        android:layout_height="40dp" />

     <ImageView
        android:id="@+id/err"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_error"/>
</LinearLayout>

编辑:只需将SpinnerImageView放在LinearLayout这样的内容中。

编辑2:我刚收到+10,因为我对这个解决方案感到有点惭愧,请按照下列步骤操作: 因此,对于与此相关的未来问题,请忽略我的回答并创建自己的custom view扩展ConstraintLayout,并在自定义布局中包含SpinnerImageView,最好是使用Kotlin。谢谢!

答案 1 :(得分:1)

在相对布局的右侧添加锚点视图可以解决此问题。将锚点视图添加到RelativeLayout:

<View
    android:id="@+id/anchor_top_right"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    />

将错误ImageView相对位置从android:layout_alignParentRight="true"替换为android:layout_toLeftOf="@id/anchor_top_right"。同时从Spinner中移除android:layout_alignParentRight="true",它与错误的左侧对齐。

以下是锚点的完整布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >

    <View
        android:id="@+id/anchor_top_right"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        />
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"
        android:text="@string/some_text"
        />
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="74dp"
        android:layout_height="40dp"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/err"
        />
    <ImageView
        android:id="@+id/err"
        android:layout_centerVertical="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/anchor_top_right"
        android:src="@drawable/ic_error"
        />
</RelativeLayout>

答案 2 :(得分:0)

我认为你的代码中有拼写错误。 它必须是android:layout_toLeftOf="@+id/err"而不是android:layout_toLeftOf="@id/err"

答案 3 :(得分:-3)

制作2个旋转器,每次使其中一个不可见