我在ConstraintLayout
中有多个视图,视视图模型的某些部分而定,其可见性可能设置为GONE
或VISIBLE
,例如:
<ImageView
android:id="@+id/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="@{viewModel.shouldShowLogo ? View.GONE : View.VISIBLE}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/logo" />
此图像将根据状态显示或消失。现在,我想基于同一状态EditText
定位另一个视图,例如shouldShowLogo
。如果显示徽标,则要将EditText
放在徽标下方,否则,我要将其放在父视图顶部下方(本质上是在屏幕顶部)。到目前为止,我已经尝试过:
<EditText
android:id="@+id/searchInput"
android:layout_height="wrap_content"
android:hint="@android:string/search_go"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@{viewModel.shouldShowLogo ? @id/logo : null}"
app:layout_constraintTop_toTopOf="@{viewModel.shouldShowLogo ? null : ConstraintSet.PARENT_ID}"/>
无法编译,出现以下错误:
无法找到接受参数类型'int'的
的设置器。
这是实现我想要做的正确方法吗?我也有种不应该使用ConstraintSet
的感觉,但是老实说,我不确定。
TL; DR-有时如何在另一个视图可见时基于另一个视图约束视图位置,而在另一个视图不可见时又如何在父视图上约束视图位置?
答案 0 :(得分:0)
看看GONE margins。如果您的 EditText 被限制在徽标的顶部到底部,而徽标被限制在父级的顶部到顶部,那么当徽标为GONE
时, EditText 将被限制在父级的顶部。我想这就是你想要的。