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

时间:2018-10-10 14:42:00

标签: android android-constraintlayout constraint-layout-chains

根据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 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

从技术上讲,您发布的内容不是“链”。当多个视图具有两者的开始和结束约束,并且所有视图彼此链接(或链接到另一个视图/链的末尾的父视图)时,便形成了一个链。因为您的第一个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"/>

这可以清楚地说明依赖项是什么,并且所有内容都可以根据需要滑动到视图的末尾。