图片a ConstraintLayout
其中包括三个垂直堆叠的项目:
@+id/top
@+id/middle1 or @+id/middle2 (one gets View.VISIBLE, one gets View.GONE)
@+id/bottom
置顶@+id/middle1
和 @+id/middle2
被限制在 @+id/top
的底部,这里没有问题。有趣的案例是
@+id/bottom
.应始终放在 @+id/middle1
之下或 @+id/middle2
,取决于哪个是可见的(另一个将得到 View.GONE
)。有什么方法可以在布局文件中对此进行建模,还是我必须更改 @+id/bottom
的顶部约束?在显示 @+id/middle1
之间切换时和 @+id/middle2
?
最佳答案
正如 CommonsWare 所提议的,它可以通过 Barrier
来完成。如下:
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:barrierAllowsGoneWidgets="false"
app:constraint_referenced_ids="middle1,middle2" />
请注意 app:constraint_referenced_ids
中的 ID不带@id/
字首。作为我的
middle1
和 middle2
有不同的高度,我将其中一个设置为 View.GONE
我选择了app:barrierAllowsGoneWidgets="false"
以确保 Barrier
位置得到更新,并且没有剩余空间。更多详情请参阅 official documentation或例如Youtube 上的视频 ConstraintLayout Tutorial Part 4 - BARRIERS AND GROUPS - Android Studio Tutorial
关于android - 如何将一个 View 约束在两个可见性可以切换的 View 之下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63320806/