android - 约束布局将多个视图分组为链中的单个项目
解决方案
一般来说,如果没有任何额外的视图和嵌套,平面视图层次结构无法实现所需的行为。
但是有一种特殊情况的解决方法,您可以事先知道视图 3 和 4 的宽度。对于该解决方法,您需要在view 3
和下方添加一个额外的不可见视图view 4
。附上示例代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/view1"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@color/colorAccent"
app:layout_constraintEnd_toStartOf="@id/view2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view2"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@color/colorAccent"
app:layout_constraintEnd_toStartOf="@id/stub_view"
app:layout_constraintStart_toEndOf="@id/view1"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/stub_view"
android:layout_width="100dp"
android:layout_height="50dp"
android:background="@color/colorPrimary"
app:layout_constraintEnd_toStartOf="@id/view5"
app:layout_constraintStart_toEndOf="@id/view2"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view3"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginEnd="0dp"
android:background="@color/colorAccent"
app:layout_constraintStart_toStartOf="@id/stub_view"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view4"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@color/colorAccent"
app:layout_constraintEnd_toEndOf="@id/stub_view"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view5"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@color/colorAccent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/stub_view"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
如果您在运行时不知道和的确切宽度View 3
-View 4
您可以使用更多技巧并将 LayoutChangeListeners 设置为这些视图以监视它们的宽度并在运行时相应地更改存根视图的宽度。但我不建议使用第二种解决方法,因为它很可能会在您的代码库中添加更多有味道的代码。
在您使用此解决方法之前,请考虑使用视图嵌套并将View 3
其View 4
放入一个LinearLayout
(或ViewGroup
您选择的其他)中。
推荐阅读
- ruby-on-rails - 允许访客在 Heroku 上创建记录
- ios - 斯威夫特如何将我的图像移回中间后?或将其旋转回原点位置
- python - 我想让命令 python3 运行 python3.7
- python - Django 原始查询输出与 pgAdmin 输出不一致
- netlogo - 使用 nw:load-graphml 在 netlogo 中导入链接品种
- c++ - 带有 OFN_ALLOWMULTISELECT 的 CFileDialog 快捷方式的结果不正确
- haskell - 类型族的类型级计算何时“发生”?
- docker - 是否需要打开端口 2377、7946、4789 才能创建 docker swarm?
- node.js - 使用 grunt/babel 转译代码时如何修复“path.inShadow 不是函数”
- firebase - firebase 安全规则 - 公开与经过身份验证