如何使用约束布局模拟加权LinearLayout

时间:2016-07-26 01:06:49

标签: android android-layout android-constraintlayout

我们如何在Constraint布局中像LinearLayout一样在空间中平等地留出空间?
例如,如果使用约束编写,下面的布局会怎样?

GameScene(size: view.bounds.size)

在约束布局中,我可以将<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> A设置为边缘,D设置为33偏差,A←B→D设置为66偏差每个元素之间的空间。
该解决方案虽然没有真正扩展。

在Constraint Layout中有没有正确的方法?

3 个答案:

答案 0 :(得分:16)

仅供参考 - Constraint Layout alpha 9添加Chains,可让您实现此行为。

enter image description here

答案 1 :(得分:7)

目前(约束布局alpha 6),执行此操作的唯一其他选项是使用具有百分比位置的垂直指南,然后对于每个窗口小部件以这样的方式将它们约束到指南: 左侧&lt; - widget A - &gt;准则1&lt; - 小部件B - &gt;准则2&lt; - widget C - &gt;右侧

准则1为0.33,准则2为0.66。

但是

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

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

答案 2 :(得分:0)

例如:

<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" />