Android 为什么我的ConstraintLayout链无法构建?
根据XML编辑器,我的布局应该如下所示: 但在应用程序中,它呈现为: 我不明白为什么链功能在这种情况下不起作用。在这个例子中,我该如何修复它,以及我通常如何掌握如何正确构建链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 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是最右边的)。这里有一个更有用的链接: