【发布时间】:2017-12-21 19:18:02
【问题描述】:
自从切换到 ConstraintLayout 版本 1.1.0-beta4 后,我的一些布局出现了问题。在进行任何更改之前,我想更好地了解ConstraintLayout 链中的边距是如何工作的。在下文中,我比较了ConstraintLayout 1.0.2 版和 1.1.0-beta4 版中的布局,但我认为问题首先出现在 1.1.0-beta2 中。
我的目标是让一些文本视图在屏幕上延伸,第一和第二文本视图与第二和第三文本视图之间有间隙。背景应显示在这些边距中。为此,我创建了一个水平链,并指定了从左侧文本视图到中心文本视图的结束边距以及从中心文本视图到右侧文本视图的结束边距。横链样式为spread_inside。
示例 1 - 使用 ConstraintLayout 1.0.2 版
这就是版本 1.0.2 中的样子,也是我所期望的。
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@android:color/holo_blue_light">
<TextView
android:id="@+id/tvLeft"
android:layout_width="0dp"
android:layout_height="35dp"
android:layout_marginEnd="8dp"
android:background="@android:color/white"
android:gravity="center"
android:text="Text1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/tvCenter"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tvCenter"
android:layout_width="0dp"
android:layout_height="35dp"
android:layout_marginEnd="8dp"
android:background="@android:color/white"
android:gravity="center"
android:text="Text2"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/tvRight"
app:layout_constraintStart_toEndOf="@+id/tvLeft"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tvRight"
android:layout_width="0dp"
android:layout_height="35dp"
android:background="@android:color/white"
android:gravity="center"
android:text="Text3"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tvCenter"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
</android.support.constraint.ConstraintLayout>
示例 2 - 使用 ConstraintLayout 版本 1.1.0-beta4
在ConstraintLayout 的 1.1.0-beta4 版本中,相同的布局如下所示。请注意,边距已消失。我希望这应该与示例 1 相同,但事实并非如此。
示例 3 - 使用带起始边距的 ConstraintLayout 版本 1.1.0-beta4
如果我采用相同的布局并简单地将8dp 的起始边距添加到右侧文本视图 (tvRight),我的边距不仅会重新出现在中间和右侧文本视图之间,而且还会出现在左侧和中间文本视图之间虽然我没有改变那里的边距。
这不仅仅是先前设置的边距突然被兑现。如果我将最右侧文本视图的起始边距设置为“48dp”,则似乎是48dp 的边距也会出现在左侧和中心文本视图之间。
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@android:color/holo_blue_light">
<!-- TextViews tvLeft & tvRight not shown but are the same as above.-->
<TextView
android:id="@+id/tvRight"
android:layout_width="0dp"
android:layout_height="35dp"
android:layout_marginStart="48dp"
android:background="@android:color/white"
android:gravity="center"
android:text="Text3"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tvCenter"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
</android.support.constraint.ConstraintLayout>
所以,我的问题是,“为什么我会看到这些结果?” ConstraintLayout 链中的边距如何处理,尤其是 spread_inside 链?处理链边距的方式是否发生了变化,还是我遗漏了什么?我正在寻找解释或参考解释这一切的一些文档。
【问题讨论】:
标签: android android-layout android-constraintlayout