Представления ConstraintLayout 1.1.0 не могут ссылаться друг на друга на одном ребре? - PullRequest
0 голосов
/ 13 мая 2018

Следующий код, используемый для нормальной работы в 1.0.2, но не работает в стабильной версии 1.1.0 - буквально устраняет влияние любого другого ограничения во всех представлениях в макете. Есть ли причина или это просто причуды? Потребовалось время, чтобы выследить его.

<?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 голосов
/ 15 мая 2018

Просто удали Приложение: layout_constraintBottom_toTopOf = "@ + идентификатор / viewTwo"
из приведенного выше 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 = "@ + id / viewTwo" это виновник.

0 голосов
/ 13 мая 2018

Добавьте app:layout_constraintTop_toTopOf="parent" к viewOne, и оно будет работать снова. Вы также можете удалить app:layout_constraintBottom_toTopOf="@+id/viewTwo" и ничего не изменится, так как это не нужно.

Хотя эти два представления ограничены по вертикали, они связаны друг с другом, и ничто не связывает их с контейнером. По умолчанию группа переместится наверх, если нет других ограничений. Похоже, что оба будут скользить к вершине в 1.1.0 и выстраиваться один под другим в 1.0.2. Это может быть лишь побочным эффектом определения видов.

В любом случае, XML не является правильно сформированным, и все представления должны быть прямо или косвенно ограничены содержащимися ConstraintLayout. Внесите изменения выше и все будет хорошо.

...