此视图不受垂直约束。在运行时,除非添加垂直约束,否则它将跳转到左侧

时间:2016-06-16 12:43:26

标签: android-layout android-studio android-edittext layout-editor

enter image description here Android Studio 2.2中的新布局编辑器会在EditText和Buttons等视图上显示此错误。此外,任何有助于使用新约束布局进行入职的链接都将受到赞赏。

代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    android:id="@+id/activity_main"
    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"
    tools:context="com.set.email.MainActivity"
    tools:layout_editor_absoluteX="0dp"
    tools:layout_editor_absoluteY="81dp">

    <TextView
        android:text="To:"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:layout_editor_absoluteX="7dp"
        tools:layout_editor_absoluteY="4dp"
        android:id="@+id/textTo"/>

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:ems="10"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="24dp"
        android:id="@+id/editTo"
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"/>

    <EditText
        android:layout_width="384dp"
        android:layout_height="42dp"
        android:inputType="textPersonName"
        android:ems="10"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="94dp"
        android:id="@+id/editSubject"
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"/>

    <EditText
        android:layout_width="384dp"
        android:layout_height="273dp"
        android:inputType="textPersonName"
        android:ems="10"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="179dp"
        android:id="@+id/editMessage"
        app:layout_constraintLeft_toLeftOf="@+id/activity_main"
        tools:layout_constraintLeft_creator="50"
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"/>

    <Button
        android:text="Send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:layout_editor_absoluteX="140dp"
        tools:layout_editor_absoluteY="454dp"
        android:id="@+id/btnSend"
        app:layout_constraintLeft_toLeftOf="@+id/editMessage"
        tools:layout_constraintLeft_creator="0"
        app:layout_constraintRight_toRightOf="@+id/activity_main"
        android:layout_marginEnd="16dp"
        tools:layout_constraintRight_creator="0"
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"/>


</android.support.constraint.ConstraintLayout>

12 个答案:

答案 0 :(得分:62)

约束布局旨在减少布局层次结构并提高布局性能(从技术上讲,您不必对不同的屏幕尺寸进行更改,不重叠,在移动设备上使用魅力以及具有相同约束的选项卡) 。当你使用新的布局编辑器时,你就是如何摆脱上述错误。

enter image description here

单击小圆圈并向左拖动直到圆圈变为绿色,添加左边约束(给出一个数字,比如说x dp。用另一边重复它,如果你有另一边,则将底部约束留空在它下面查看。 enter image description here

编辑:根据开发人员网站,您可以将每个视图移动到所需位置,而不是在每个视图中添加约束,然后单击“推断约束”以自动创建约束。更多here

答案 1 :(得分:25)

从Android Studio v3及更高版本开始,从下拉列表中删除了Infer Constraint。

使用设计预览上方工具栏菜单中的魔棒图标;有“推断约束”按钮。单击此按钮,这将自动在文本字段中添加一些行,并且将删除红线。

enter image description here

答案 2 :(得分:21)

转到设计,右键单击您的Widget, 约束布局&gt;&gt;推断约束。您可以观察到某些代码已自动添加到您的文本中。

答案 3 :(得分:14)

只需将此代码复制到您要拖动的所有组件即可。

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"

示例:

<TextView
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    android:text="To:"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:layout_editor_absoluteX="7dp"
    tools:layout_editor_absoluteY="4dp"
    android:id="@+id/textTo"/>

答案 4 :(得分:4)

Follow these steps:
Right click on designing part > Constraint Layout > Infer Constraints

答案 5 :(得分:4)

.separator

这对我有很大帮助

答案 6 :(得分:2)

如果推断Constraints仍然提供错误,请使用以下代码:

app:layout_constraintBottom_toBottomOf="parent"

答案 7 :(得分:1)

您需要从布局边缘拖动EditText,而不只是拖动其他窗口小部件。您还可以通过将窗口小部件周围的约束点拖动到屏幕边缘来添加约束,以添加指定的约束。

修改后的代码看起来与此类似:

    app:layout_constraintLeft_toLeftOf="@+id/router_text"
    app:layout_constraintTop_toTopOf="@+id/activity_main"
    android:layout_marginTop="320dp"
    app:layout_constraintBottom_toBottomOf="@+id/activity_main"
    android:layout_marginBottom="16dp"
    app:layout_constraintVertical_bias="0.29" 

答案 8 :(得分:1)

转到XML布局文本,其中窗口小部件(按钮或其他视图)指示错误,将光标对准并按 alt + 输入并选择缺少的约束属性。

答案 9 :(得分:0)

例如我有这个

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

像这样使用RelativeLayout布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

答案 10 :(得分:0)

只需切换到“设计视图”,然后找到所需的小部件。抓住小部件边界上的点之一,并将其​​连接到屏幕的适当边缘(或其他某个小部件上的点)。

例如,如果小部件是工具栏,则只需抓住最上面的点并将其连接到电话屏幕的最上面的边缘即可,如图所示。

Design View

答案 11 :(得分:-4)

您必须将androidx.constraintlayout.widget.ConstraintLayout更改为RelativeLayout