如何将元素的一侧置于另一个元素的中间?

时间:2017-12-04 14:06:42

标签: android layout android-xml android-constraintlayout

我正在使用ConstraintLayout,并希望将元素的左侧居中到位于其上方的元素的中间。

[I'm Element 1]

        | // middle of element 1

        [Element 2 should start at middle of element 1]

如果没有编写代码,这是否可行?若是,怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用约束对齐元素2。要使元素居中,您可以将左侧约束到元素1的左侧,并对右侧执行相同的操作。所以在xml中它会是这样的:

<Element2
    android:id="@+id/element2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintLeft_toLeftOf="@+id/element1"
    app:layout_constraintRight_toRightOf="@+id/element1" />

那应该水平居中。如果您还想垂直居中,只需添加顶部和底部约束。

编辑:误解了这个问题,如果你想将一个元素的左侧与另一个元素的中心对齐,你可以使用GuideLine

创建指南并将其基线定位到Element1的基线:

<android.support.constraint.Guideline
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintBaseline_toBaselineOf="@+id/element1"/>

然后将element2的左侧与GuideLine

对齐
<Element2
    android:id="@+id/element2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintLeft_toLeftOf="@+id/guideline" />

答案 1 :(得分:0)

解决方案如下:使用1px * 1px View作为指导,而不是指南,使用element1&amp;将其放置在layout_constraintLeft_toLeftOf的中心位置。 layout_constraintRight_toRightOf个属性,然后将element2与此View指南对齐:

<android.support.constraint.ConstraintLayout>
    ...

    <TextView
            android:id="@+id/element1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    <View
            android:id="@+id/guideline"
            android:layout_width="1px"
            android:layout_height="1px"
            android:background="#00000000"
            app:layout_constraintLeft_toLeftOf="@id/element1"
            app:layout_constraintRight_toRightOf="@id/element1" />

    <TextView
            android:id="@+id/element2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintLeft_toRightOf="@id/guideline"
            app:layout_constraintTop_toBottomOf="@id/element1" />

    ...
</android.support.constraint.ConstraintLayout>