ConstraintLayout 1.1.0视图不能在同一边缘相互引用?

时间:2018-05-13 03:44:03

标签: android-constraintlayout

下面的代码用于在1.0.2中正常工作,但在1.1.0 stable中不起作用 - 字面上删除了布局中所有视图中所有其他约束的影响。有原因还是只是一个怪癖?花了一段时间来追捕它。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:app1="http://schemas.android.com/apk/res-auto">

    <TextView
        android:id="@+id/viewOne"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toTopOf="@+id/viewTwo" <-- culprit
        tools:text="View one"/>

    <TextView
        android:id="@+id/viewTwo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app1:layout_constraintTop_toBottomOf="@+id/viewOne" <-- culprit
        tools:text="View two"/>

</android.support.constraint.ConstraintLayout>

删除其中一个罪魁祸首约束会使所有内容在1.1.0中恢复正常。

2 个答案:

答案 0 :(得分:2)

app:layout_constraintTop_toTopOf="parent"添加到viewOne,它将再次有效。您也可以删除app:layout_constraintBottom_toTopOf="@+id/viewTwo",因为不需要,所以不会发生任何变化。

虽然两个视图是垂直约束的,但它们彼此约束,没有任何东西将它们绑定到容器。如果没有其他限制,该组将默认滑动到顶部。看起来两者都将在1.1.0中滑到顶部并在1.0.2中排在另一个之下。这可能只是视图定义的副作用。

在任何情况下,XML都没有格式良好,并且视图都应该直接或间接地限制为包含ConstraintLayout。进行上述更改,一切顺利。

答案 1 :(得分:1)

删除     应用:layout_constraintBottom_toTopOf =&#34; @ + ID / viewTwo&#34;
从上面的xml代码中你很高兴。

下面给出的代码非常有效。

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:app1="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <TextView
        android:id="@+id/viewOne"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="View one" />

    <TextView
        android:id="@+id/viewTwo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app1:layout_constraintTop_toBottomOf="@+id/viewOne"
        tools:text="View two" />

    </android.support.constraint.ConstraintLayout>

所以仅在你的情况下      app:layout_constraintBottom_toTopOf =&#34; @ + id / viewTwo&#34; 这是罪魁祸首。