无法在Android Studio中两个视图/小部件之间形成链。

42
当我在Android Studio的布局编辑器中尝试使用约束锚点将一个EditText视图和一个Button视图制作成双向约束(链式约束)时,它并没有生成链式约束。只有当我尝试将一个View限制到另一个View时才会生成约束。我正在尝试将EditText的右侧与Button的左侧进行链式约束。以下是我的布局编辑器截图:

4
安卓教程很糟糕,省略了许多步骤,按钮不在他们所说的位置,顺序也不像他们所说的那样工作... 非常令人沮丧。需要有人制作一个如何学习该教程的教程。如果有人找到更好的替代方案,请发布一下。 - segFaultCoder
这里也遇到了同样的问题... 目前似乎必须在选定两个视图后使用“水平居中”选项。也许是版本的问题? - Adel Khial
16个回答

20

我也在试图弄清这个问题。我发现一种方法是选择两个视图,然后右键单击并选择水平居中。这样会创建链,但是您还必须相应地调整其他约束条件。我对Android是新手,所以肯定会有其他方法...


12

8
在Android Studio 3.0.1中,选择两个对象(在xml设计选项卡上),右键单击其中一个,您将在“Chain”选项下获得两个选项:水平链和垂直链。请参照以下截图操作:enter image description here

3
我有一个解决方案,可能不是最好的,直到有人真正正确地回答之前,但它有效。我希望这可以帮助其他陷入与我相同境地的人,以便您可以继续工作。
看起来当创建链时,android studio的界面没有正常工作。这里的一些选项适用于2或3个元素,但我有5个元素。
因此,答案是在XML代码中解决这个问题。
我的步骤是针对水平排列的,如果你想要垂直的,只需将Right/Left更改为Top/Bottom
我将所有元素放在我想要的位置,并删除所有连接。(然后在我的情况下,我连接了顶部和底部,以便它们可以在中间。)
然后我连接最左边的第一个元素和最右边的最后一个元素。并将每个元素的右侧连接到下一个元素的左侧。
app:layout_constraintRight_toLeftOf="@id/right_element" 元素正常连接图像,尚未进行链式连接

之后,我进入代码并手动将连接放在左侧元素中。

app:layout_constraintLeft_toRightOf="@+id/left_element"

然后就创建了 元素链接的图像

希望这有所帮助,抱歉没有发布图片,我的声誉还不够高XD。


2
在Android Studio 3.2.2中,您需要在组件树中单击视图。首先左键单击第一个组件,然后按住shift键单击第二个组件,接着右键单击,在菜单中您将看到与下面屏幕截图中相似的链图标。

Android Studio 3.2.2

enter image description here


2
我认为Android Studio的UI编辑器需要更多改进,以便更好地创建链。目前我正在使用Android Studio预览版3.0 Canary 3。
有时从编辑器中可以完美地工作,但有时候它不行。当UI编辑器无法连接时,我们需要根据垂直或水平链的要求手动添加约束。以下是约束条件:
layout_constraintTop_toTopOf
layout_constraintTop_toBottomOf
layout_constraintBottom_toTopOf
layout_constraintBottom_toBottomOf
layout_constraintBaseline_toBaselineOf
layout_constraintStart_toEndOf
layout_constraintStart_toStartOf
layout_constraintEnd_toStartOf
layout_constraintEnd_toEndOf

同时,我们也可以在XML中手动声明链式样式,如下所示:

layout_constraintHorizontal_chainStyle或layout_constraintVertical_chainStyle

CHAIN_SPREAD -- 元素将会被平均分布(默认样式)

加权链式 -- 在CHAIN_SPREAD模式下,如果某些小部件设置为MATCH_CONSTRAINT,则它们将分配可用空间

CHAIN_SPREAD_INSIDE -- 类似于CHAIN_SPREAD,但是链的端点不会分散

CHAIN_PACKED -- 链的元素将被紧密排列在一起。然后,子级的水平或垂直偏差属性将影响紧密排列元素的位置

希望Android Studio编辑器能够改进这一点。


1
这可以通过按住Shift键并同时按下两个小部件来解决。完成此过程后,您可以右键单击其中一个小部件以链接视图。特别是对于EditText View和按钮,使用此功能。

1
我能够在蓝图布局中创建链式视图的方法是,拖动点击并选择要链接的对象。然后在选择它们的同时,右键单击并选择“水平居中”。完成此操作后,我就可以创建其他约束和链条了。

1

通过在编辑文本(app:layout_constraintRight_toLeftOf =“@ + id / button”)和按钮(app:layout_constraintBaseline_toBaselineOf =“@ + id / editText”)中添加约束解决

完整示例如下所示

<EditText
    android:id="@+id/editText"
    android:layout_width="245dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:layout_marginStart="16dp"
    android:ems="10"
    app:layout_constraintRight_toLeftOf="@+id/button"
    android:hint="@string/edit_message"
    android:inputType="textPersonName"
    app:layout_constraintLeft_toLeftOf="parent"
    android:layout_marginTop="16dp"
    app:layout_constraintTop_toTopOf="parent" />

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button"
    android:layout_marginRight="16dp"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintBaseline_toBaselineOf="@+id/editText"
    app:layout_constraintLeft_toRightOf="@+id/editText"
    android:layout_marginLeft="16dp" />

0

我违反了教程,打开了自动连接(因为我想尝试一切)。

我选择了两个小部件,然后选择了水平居中。链被创建了,我关闭了自动连接,然后继续教程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接