Почему моя цепочка ConstraintLayout не может быть собрана? - PullRequest
0 голосов
/ 10 октября 2018

В соответствии с редактором XML мой макет должен выглядеть следующим образом: enter image description here

Но в приложении он выглядит так:

enter image description here

Я не понимаю, почему функция цепочки не работает в подобных случаях.Как мне исправить это для этого экземпляра и как я могу получить общее представление о том, как правильно строить цепочки?

<?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:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <ImageButton
        android:id="@+id/verfügungButton"
        android:layout_width="@dimen/icon_size"
        android:layout_height="@dimen/icon_size"
        android:layout_marginStart="8dp"
        android:scaleType="fitCenter"
        android:src="@drawable/icons8_home_50"

        app:layout_constraintEnd_toStartOf="@+id/ramhat" />


    <ImageButton
        android:id="@+id/ramhat"

        android:layout_width="@dimen/icon_size"
        android:layout_height="@dimen/icon_size"

        android:scaleType="fitCenter"
        android:src="@drawable/icons8_settings_50"

        app:layout_constraintEnd_toStartOf="@+id/kuerzel"
        app:layout_constraintStart_toEndOf="@id/verfügungButton"
        />


    <TextView
        android:id="@+id/kuerzel"
        android:layout_width="@dimen/icon_size"
        android:layout_height="@dimen/icon_size"
        android:layout_marginStart="8dp"

        android:text="Text2"

        app:layout_constraintEnd_toStartOf="@+id/rubrik"
        app:layout_constraintStart_toEndOf="@id/ramhat" />


    <TextView
        android:id="@+id/rubrik"
        android:layout_width="@dimen/icon_size"
        android:layout_height="@dimen/icon_size"
        android:layout_gravity="center_vertical"
        android:layout_marginStart="8dp"
        android:text="Text1"

        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/kuerzel" />
</android.support.constraint.ConstraintLayout>

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

В моем конструкторе этот xml выглядит точно так же, как вы показываете, когда приложение работает.

Чтобы получить макет, который вам нужен, после того как я изменил его на это (большая часть xml удалена):

    android:id="@+id/kuerzel"
    android:text="Text1"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent" 

    android:id="@+id/kuerzel"
    android:text="Text2"
    app:layout_constraintEnd_toStartOf="@+id/rubrik" 

    android:id="@+id/ramhat"
    app:layout_constraintEnd_toStartOf="@+id/kuerzel"

    android:id="@+id/verfügungButton"
    app:layout_constraintEnd_toStartOf="@+id/ramhat"
0 голосов
/ 10 октября 2018

То, что вы опубликовали, технически не является "цепочкой".Цепочка формируется, когда несколько представлений имеют и начальные и конечные ограничения, и все представления связаны друг с другом (или с другим представлением / родителем для концов цепочки).Поскольку у вашего первого ImageButton есть только конечное ограничение, это , а не цепочка.

Конечно, это совершенно нормально.В любом случае, вы, вероятно, даже не хотите цепочку, поскольку хотите, чтобы все переместилось до конца родительского элемента.

Но, учитывая это, это означает, что мы можем изменить ваши существующие ограничения.Удалите все ограничения app:layout_constraintStart_toEndOf:

<ImageButton
    android:id="@+id/verfügungButton"
    app:layout_constraintEnd_toStartOf="@+id/ramhat"/>

<ImageButton
    android:id="@+id/ramhat"
    app:layout_constraintEnd_toStartOf="@+id/kuerzel"/>

<TextView
    android:id="@+id/kuerzel"
    app:layout_constraintEnd_toStartOf="@+id/rubrik"/>

<TextView
    android:id="@+id/rubrik"
    app:layout_constraintEnd_toEndOf="parent"/>

Это сделает кристально ясным, каковы зависимости, и все будет скользить до конца представления по желанию.

0 голосов
/ 10 октября 2018

Измените первую кнопку ImageButton следующим образом:

<ImageButton
    android:id="@+id/verfügungButton"
    android:layout_width="@dimen/icon_size"
    android:layout_height="@dimen/icon_size"
    android:layout_marginStart="8dp"
    android:scaleType="fitCenter"
    android:src="@drawable/icons8_home_50"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/ramhat" />

Вы потеряете app:layout_constraintStart_toStartOf="parent" в первом элементе цепочки.

UPD: см. Дополнительную информацию здесь: https://developer.android.com/training/constraint-layout/

Цепочка работает правильно, только если каждый ее конец ограничен другим объектом на той же оси, как показано на рисунке 14.

...