android - 如何将一个 View 约束在两个可见性可以切换的 View 之下?

标签 android android-constraintlayout

图片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/字首。
作为我的middle1middle2有不同的高度,我将其中一个设置为 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/

相关文章:

java - 在 Fragments Android 中使用 ConstraintLayout 时的空 UI

安卓|在 LogCat 中打印 Activity 任务堆栈

java - 如何正确子类 SimpleCameraHost 以在 caac-camera 中使用?

android - 从后台返回后尝试打开的 DialogFragment

android - 系统重新启动后在广播接收器中显示警报对话框

java - 如果 2 TextView 在 ConstraintLayout 中有长文本,如何缩小第一个 TextView 而不是第二个?

android - 如何使 GridLayoutManager 中的某个项目的高度相对于另一个项目进行调整?

android - ConstraintLayout 在彼此之间居中 View

ConstraintLayout 中的 Android MapFragment 失败

java - 运行 Android 项目时发生错误 - 不支持的 major.minor 版本