约束布局问题

Constraint Layout Issues

UI 约束布局在 Android Studio 上显示良好,但在移动设备上构建和测试后变得不规则和分散。当将我的约束布局更改为相对或线性布局时,我的设计完美无缺。那么,如果我们不能在其中正确编码,那么约束布局有什么好处。这是我的代码:

   <?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"
        android:background="@color/background_color"
        android:paddingHorizontal="@dimen/button_horizontal_padding">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="143dp"
            android:layout_marginStart="143dp"
            android:text="@string/booking_done_title"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Title"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            tools:ignore="MissingConstraints"
            tools:layout_editor_absoluteY="56dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="@string/booking_done_sub_title"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            tools:ignore="MissingConstraints"
            tools:layout_editor_absoluteY="95dp" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_booking_done_image"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            tools:ignore="MissingConstraints"
            tools:layout_editor_absoluteY="188dp" />

        <Button
            android:id="@+id/hotelBookNowBtn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginHorizontal="@dimen/button_horizontal_padding"
            android:background="@drawable/green_button_background"
            android:gravity="center"
            android:paddingHorizontal="@dimen/button_horizontal_padding"
            android:text="@string/done"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
            android:textColor="@color/white"
            android:textStyle="normal"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            tools:ignore="MissingConstraints"
            tools:layout_editor_absoluteY="353dp" />

        <TextView
            android:id="@+id/viewSummaryView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/view_full_summary"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
            android:textColor="@color/colorPrimary"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.498"
            app:layout_constraintStart_toStartOf="parent"
            tools:ignore="MissingConstraints"
            tools:layout_editor_absoluteY="425dp" />

        <android.support.constraint.Group
            android:id="@+id/group"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </android.support.constraint.ConstraintLayout>

tools 命名空间属性启用仅在布局编辑器中使用的 design-time 功能。 tools:layout_editor_absoluteY 的值在运行时对 View 没有影响。

View 缺少适当的约束时,布局编辑器将显示警告。但是,在您的情况下,您通过为 Views 设置 tools:ignore="MissingConstraints" 忽略了这些警告。您只为 Views 设置了水平约束,但缺少垂直约束。

为了在布局编辑器中为 View 设置约束,您需要单击 View 边缘的圆圈并将它们拖向其他 Views 或parent 的边缘。也可以使用适当的属性直接在 XML 中设置约束。完整列表可以在 ConstraintLayout documentation

中找到

我遇到了同样的问题,结果发现你处理的所有视图都必须是约束的。例如,如果你在布局的 bottom/middle 处有一个按钮并且你想留在那个地方你需要对布局的两侧和底部使用约束。 Android工作室给你一个警告。