此视图不受垂直限制。在运行时它会跳到左边,除非你添加垂直约束
This view is not constrained vertically. At runtime it will jump to the left unless you add a vertical constraint
Android Studio 2.2 中的新布局编辑器不断在 EditText 和 Buttons 等视图上显示此错误。敬请 help.Also,任何有助于使用新约束布局的链接都将不胜感激。
代码:
<?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>
约束布局旨在减少布局层次结构并提高布局性能(从技术上讲,您不必针对不同的屏幕尺寸进行更改,不重叠,在移动设备和选项卡上都具有相同的效果constraints)。这里是你如何在使用新的布局编辑器时摆脱上述错误。
单击小圆圈并将其向左拖动直到圆圈变为绿色,以添加一个左约束(给一个数字,例如 x dp。对另一边重复此操作,如果您需要,请将底部约束留空在它下面有另一个视图。
编辑:根据开发者网站,您可以将每个视图移动到您想要的位置,而不是在将它们放置在布局中时向每个视图添加约束,然后单击 Infer Constraints 以自动创建约束。更多 here
您需要从布局的边缘拖动 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"
转到设计,右键单击您的小部件,
约束布局 >> 推断约束。您可以观察到一些代码已自动添加到您的文本中。
只需将此代码复制到您要拖动的所有组件即可。
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"/>
Follow these steps:
Right click on designing part > Constraint Layout > Infer Constraints
如果推断 Constraints
仍然给您错误,只需使用此代码:
app:layout_constraintBottom_toBottomOf="parent"
转到小部件(按钮或其他视图)指示错误的 XML 布局文本,将光标聚焦在那里并按 alt+输入 和 select 缺少约束属性。
从 Android Studio v3 及更高版本开始,推断约束已从下拉列表中删除。
使用设计预览上方工具栏菜单中的魔术棒图标;有“推断约束”按钮。单击此按钮,这将自动在文本字段中添加一些行,红线将被删除。
例如我有这个
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
像这样使用 RelativeLayout 布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
只需切换到设计视图,然后找到相关的小部件。抓住小部件边界上的一个点并将其连接到屏幕的适当边缘(或其他小部件上的点)。
例如,如果小部件是工具栏,只需抓住 top-most 点并将其连接到 phone 屏幕的 top-most 边缘,如图所示。
您必须将 androidx.constraintlayout.widget.ConstraintLayout
更改为 RelativeLayout
。
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
这对我帮助很大
代码:
<?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>
约束布局旨在减少布局层次结构并提高布局性能(从技术上讲,您不必针对不同的屏幕尺寸进行更改,不重叠,在移动设备和选项卡上都具有相同的效果constraints)。这里是你如何在使用新的布局编辑器时摆脱上述错误。
单击小圆圈并将其向左拖动直到圆圈变为绿色,以添加一个左约束(给一个数字,例如 x dp。对另一边重复此操作,如果您需要,请将底部约束留空在它下面有另一个视图。
编辑:根据开发者网站,您可以将每个视图移动到您想要的位置,而不是在将它们放置在布局中时向每个视图添加约束,然后单击 Infer Constraints 以自动创建约束。更多 here
您需要从布局的边缘拖动 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"
转到设计,右键单击您的小部件, 约束布局 >> 推断约束。您可以观察到一些代码已自动添加到您的文本中。
只需将此代码复制到您要拖动的所有组件即可。
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"/>
Follow these steps:
Right click on designing part > Constraint Layout > Infer Constraints
如果推断 Constraints
仍然给您错误,只需使用此代码:
app:layout_constraintBottom_toBottomOf="parent"
转到小部件(按钮或其他视图)指示错误的 XML 布局文本,将光标聚焦在那里并按 alt+输入 和 select 缺少约束属性。
从 Android Studio v3 及更高版本开始,推断约束已从下拉列表中删除。
使用设计预览上方工具栏菜单中的魔术棒图标;有“推断约束”按钮。单击此按钮,这将自动在文本字段中添加一些行,红线将被删除。
例如我有这个
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
像这样使用 RelativeLayout 布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
只需切换到设计视图,然后找到相关的小部件。抓住小部件边界上的一个点并将其连接到屏幕的适当边缘(或其他小部件上的点)。
例如,如果小部件是工具栏,只需抓住 top-most 点并将其连接到 phone 屏幕的 top-most 边缘,如图所示。
您必须将 androidx.constraintlayout.widget.ConstraintLayout
更改为 RelativeLayout
。
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
这对我帮助很大