我有一个相对布局,左边有一个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"
编辑:谢谢,我纠正了错字,但这不是问题的原因
答案 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>
编辑:只需将 Spinner
和ImageView
放在LinearLayout
这样的内容中。
编辑2:我刚收到+10
,因为我对这个解决方案感到有点惭愧,请按照下列步骤操作:
因此,对于与此相关的未来问题,请忽略我的回答并创建自己的custom view
扩展ConstraintLayout
,并在自定义布局中包含Spinner
和ImageView
,最好是使用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个旋转器,每次使其中一个不可见