此视图不受垂直约束。在运行时它会跳到左边,除非你添加一个垂直约束

Posted

技术标签:

【中文标题】此视图不受垂直约束。在运行时它会跳到左边,除非你添加一个垂直约束【英文标题】:This view is not constrained vertically. At runtime it will jump to the left unless you add a vertical constraint 【发布时间】:2016-10-17 23:53:54 【问题描述】:

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_
    android:layout_
    tools:context="com.set.email.MainActivity"
    tools:layout_editor_absoluteX="0dp"
    tools:layout_editor_absoluteY="81dp">

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

    <EditText
        android:layout_
        android:layout_
        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_
        android:layout_
        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_
        android:layout_
        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_
        android:layout_
        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>

【问题讨论】:

什么错误?请描述您的实际问题。这还不够详细。 你能分享你的xml代码吗?? 约束布局布局完成后,点击按钮自动添加所有缺失的约束。 按钮?你是说红色绒毛灯泡?它没有显示任何自动添加缺失约束的选项。 【参考方案1】:

从 Android Studio v3 及更高版本开始,推断约束已从下拉列表中移除。

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

【讨论】:

在我的例子中,它只添加了一个忽略约束,但并不能解决问题 这个解决方案比上面的解决方案更容易。但仅适用于 AS v3 及更高版本。【参考方案2】:

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

单击小圆圈并将其向左拖动直到圆圈变为绿色,以添加左侧约束(给一个数字,例如 x dp。对其他边重复此操作,如果您有另一个约束,则将底部约束留空在它下面查看。

编辑:根据开发者网站的说法,您可以将每个视图移动到您想要的位置,而不是在将每个视图放置在布局中时为其添加约束,然后单击“推断约束”以自动创建约束。更多here

【讨论】:

我刚刚在约束布局中添加了 imageview,但在运行应用程序时没有显示。你能帮帮我吗?【参考方案3】:

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

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_
    android:layout_
    tools:layout_editor_absoluteX="7dp"
    tools:layout_editor_absoluteY="4dp"
    android:id="@+id/textTo"/>

【讨论】:

但是为什么呢?你能解释一下它的细节吗?【参考方案4】:

转到设计,右键单击您的小部件, 约束布局>>推断约束。您可以观察到一些代码已自动添加到您的文本中。

【讨论】:

是的,推断约束使用activity.xml文件中指定的默认值【参考方案5】:
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"

这对我很有帮助

【讨论】:

这是正确答案!简单而甜蜜。 感谢完美解决方案【参考方案6】:
Follow these steps:
Right click on designing part > Constraint Layout > Infer Constraints

【讨论】:

【参考方案7】:

如果推断Constraints 仍然给您错误,只需使用以下代码:

app:layout_constraintBottom_toBottomOf="parent"

【讨论】:

【参考方案8】:

您需要从布局边缘拖动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" 

【讨论】:

【参考方案9】:

转到小部件(按钮或其他视图)指示错误的 XML 布局文本,将光标聚焦在那里并按 alt+enter 并选择缺少的约束属性。

【讨论】:

它还给出警告信息,硬编码字符串“TextView”,应该使用@string资源【参考方案10】:

例如我有这个

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

像这样使用RelativeLayout布局

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

【讨论】:

【参考方案11】:

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

例如,如果小部件是工具栏,只需抓住最顶部的点并将其连接到手机屏幕的最顶部边缘,如图所示。

【讨论】:

【参考方案12】:

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

【讨论】:

以上是关于此视图不受垂直约束。在运行时它会跳到左边,除非你添加一个垂直约束的主要内容,如果未能解决你的问题,请参考以下文章

在自定义表格视图单元格问题中水平/垂直约束

以编程方式将视图添加到垂直堆栈视图打破了垂直堆栈视图的约束

使用编程约束 UIKit 使 UIImage 居中(水平或垂直)

一个iOS约束布局的小技巧

一个iOS约束布局的小技巧

布局问题Android Studio [关闭]