为什么我的 ConstraintLayout 链无法构建?

Why does my ConstraintLayout chain fail to build?

根据 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: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>

像这样更改第一个 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"

更新: 在此处查看更多信息:https://developer.android.com/training/constraint-layout/

A chain works properly only if each end of the chain is constrained to another object on the same axis, as shown in figure 14.

在我的设计器中,这个 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"

从技术上讲,您发布的内容不是 "chain"。当多个视图具有 both 开始和结束约束时,将形成一个链,并且所有视图都相互链接(或链接到链末端的另一个视图/父视图)。因为您的第一个 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"/>

这使得 crystal 清楚依赖项是什么,所有内容都会根据需要滑动到视图的末尾。