约束布局中的条件定位

时间:2020-10-02 04:09:47

标签: android android-constraintlayout

我在ConstraintLayout中有多个视图,视视图模型的某些部分而定,其可见性可能设置为GONEVISIBLE,例如:

    <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-有时如何在另一个视图可见时基于另一个视图约束视图位置,而在另一个视图不可见时又如何在父视图上约束视图位置?

1 个答案:

答案 0 :(得分:0)

看看GONE margins。如果您的 EditText 被限制在徽标的顶部到底部,而徽标被限制在父级的顶部到顶部,那么当徽标为GONE时, EditText 将被限制在父级的顶部。我想这就是你想要的。