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

Android 为什么我的ConstraintLayout链无法构建?,android,android-constraintlayout,constraint-layout-chains,Android,Android Constraintlayout,Constraint Layout Chains,根据XML编辑器,我的布局应该如下所示: 但在应用程序中,它呈现为: 我不明白为什么链功能在这种情况下不起作用。在这个例子中,我该如何修复它,以及我通常如何掌握如何正确构建链 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

根据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
    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\u constraintStart\u toStartOf=“parent”

UPD: 请参见此处的更多信息:

只有当链的每一端约束到同一轴上的另一个对象时,链才能正常工作,如图14所示


更改第一个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\u constraintStart\u toStartOf=“parent”

UPD: 请参见此处的更多信息:

只有当链的每一端约束到同一轴上的另一个对象时,链才能正常工作,如图14所示


在我的设计器中,此xml与应用程序运行时显示的完全相同

要在我将布局更改为此(大部分xml已删除)后获取布局,请执行以下操作:


在我的设计器中,此xml与应用程序运行时显示的完全相同

要在我将布局更改为此(大部分xml已删除)后获取布局,请执行以下操作:


从技术上讲,你发布的不是一条“链”。当多个视图同时具有开始约束和结束约束,并且所有视图彼此链接(或链接到链末端的另一个视图/父视图)时,将形成链。因为您的第一个
ImageButton
只有一个结束约束,所以这不是一个链

当然,那很好。你可能根本就不想要一条链,因为你希望所有的东西都滑到父对象的末尾

但考虑到这一点,这意味着我们可以改变您现有的约束条件。删除所有
app:layout\u constraints start\u to endof
约束:

<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"/>


这使得依赖关系非常清晰,所有内容都可以根据需要滑动到视图的末尾。

从技术上讲,您发布的内容不是“链”。当多个视图同时具有开始约束和结束约束,并且所有视图彼此链接(或链接到链末端的另一个视图/父视图)时,将形成链。因为您的第一个
ImageButton
只有一个结束约束,所以这不是一个链

当然,那很好。你可能根本就不想要一条链,因为你希望所有的东西都滑到父对象的末尾

但考虑到这一点,这意味着我们可以改变您现有的约束条件。删除所有
app:layout\u constraints start\u to endof
约束:

<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"/>


这使得依赖关系非常清晰,所有内容都可以根据需要滑动到视图的末尾。

您真的使用德语名称作为ID吗?即使是乌姆劳特?80年代打电话来了,他们想要回他们的丹格利什@沃伦费思:说来话长……你真的用德语名字作为身份证吗?即使是乌姆劳特?80年代打电话来了,他们想要回他们的丹格利什@沃伦费思:这是一个较长的故事……如果我这样做,元素就不再像第一张图中所示那样位于屏幕右侧。是的,元素将分布在整个屏幕宽度上。不为链的起点设置约束。我用有用的链接更新了我的答案。除了@igor_rb所说的之外,在verfügungButton中添加
app:layout\u constraintHorizontal\u chainStyle=“packed”
app:layou constraintHorizontal\u bias=“1”
。第一行指示如何分发视图(打包而不是默认排列),第二行指示整个打包链应该向右(0是最左边的,1是最右边的)。这里有一个更有用的链接:如果我这样做,元素就不再像第一张图中所示的那样位于屏幕右侧。是的,元素将分布在所有屏幕宽度上。不为链的起点设置约束。我用有用的链接更新了我的答案。除了@igor_rb所说的之外,在verfügungButton中添加
app:layout\u constraintHorizontal\u chainStyle=“packed”
app:layou constraintHorizontal\u bias=“1”
。第一行指示如何分发视图(打包而不是默认排列),第二行指示整个打包链应该向右(0是最左边的,1是最右边的)。这里有一个更有用的链接: