13

我们如何在约束布局中像在线性布局中一样节省空间?
例如,如果下面的布局是用约束编写的,它会变成什么样子?

<LinearLayout 
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="horizontal">

  <TextView
    android:id="A"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1" />

  <TextView
    android:id="B"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1" />

  <TextView
    android:id="C"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1" />

  <TextView
    android:id="D"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1" />
</LinearLayout>

在约束布局中,我可以设置AD到边缘,A←B→D偏置为 33,偏置A←C→D为 66,以便在每个元素之间具有相等的空间。
但是,该解决方案并没有真正扩展。

在约束布局中是否有正确的方法来做到这一点?

4

3 回答 3

23

仅供参考 -约束布局 alpha 9添加了Chains,它允许您实现此行为。

在此处输入图像描述

于 2016-09-29T16:15:15.907 回答
7

目前(约束布局 alpha 6)唯一的其他选择是使用具有百分比位置的垂直指南,然后对于每个小部件以这样的方式将它们约束到指南:左侧 <- 小部件 A -> 指南 1 <- 小部件 B -> 指南 2 <- 小部件 C -> 右侧

指南 1 为 0.33,指南 2 为 0.66。

但。

虽然它有效,但我怀疑它是否会比使用线性布局更快地完成这个特定任务——如果你想要的只是这种确切的行为,只需使用线性布局(即使在约束布局内)。它为您提供约束布局的唯一优点是您可以仅为给定轴定义此行为,另一个轴可以完全不同地约束(而对于 LL,它将对齐 - 但这是共同的需要) .

尽管我们确实计划在未来版本的约束布局中使这种特定行为更容易实现,但这并不意味着不再使用所有现有布局。

于 2016-08-10T15:54:45.477 回答
-1

例如:

<Button
    android:id="@+id/btn_a"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="ButtonA"
    app:layout_constraintHorizontal_chainStyle="spread"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toLeftOf="@+id/btn_b" />

<Button
    android:id="@+id/btn_b"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="ButtonB"
    app:layout_constraintLeft_toRightOf="@+id/btn_a"
    app:layout_constraintRight_toLeftOf="@+id/btn_c" />

<Button
    android:id="@+id/btn_c"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="ButtonC"
    app:layout_constraintLeft_toRightOf="@+id/btn_b"
    app:layout_constraintRight_toRightOf="parent" />

于 2016-11-21T08:54:58.023 回答