Android ConstraintLayouts 不一致

Android ConstraintLayouts are inconsistent

在 Android Studio 中,我设计了一个新的 Activity UI,如下所示:

但在运行时,所有小部件(除了 Min (sec) TextView)都在左上角堆叠在一起(我' d 包括截图,但 Imgur 或 AWS S3 有问题,所以不允许我上传它)。

这是我目前拥有的 UI XML:

<?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"
    tools:context="com.example.zacharvey.freedomawsapp.MatchSetupActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="156dp"
        android:layout_height="27dp"
        android:text="Match Setup"
        android:textSize="18sp"
        tools:layout_editor_absoluteY="1dp"
        android:layout_marginLeft="16dp"
        layout_constraintLeft_toLeftOf="parent"
        layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="146dp"
        android:layout_height="23dp"
        android:layout_marginLeft="16dp"
        android:text="Consent Type:"
        android:textSize="14sp"
        tools:layout_editor_absoluteY="64dp"
        layout_constraintLeft_toLeftOf="parent"
        layout_constraintTop_toBottomOf="@+id/textView5" />

    <RadioButton
        android:id="@+id/consent.voice"
        android:layout_width="166dp"
        android:layout_height="31dp"
        android:checked="true"
        android:defaultFocusHighlightEnabled="false"
        android:text="Voice-Activated"
        tools:layout_editor_absoluteY="95dp"
        android:layout_marginRight="202dp"
        layout_constraintLeft_toLeftOf="parent"
        layout_constraintTop_toBottomOf="@+id/textView5" />

    <RadioButton
        android:id="@+id/consent.switch"
        android:layout_width="201dp"
        android:layout_height="28dp"
        android:text="Connected Switches"
        tools:layout_editor_absoluteY="126dp"
        android:layout_marginLeft="16dp"
        layout_constraintLeft_toLeftOf="parent"
        layout_constraintTop_toBottomOf="@+id/consent.voice" />

    <TextView
        android:id="@+id/textView7"
        android:layout_width="129dp"
        android:layout_height="19dp"
        android:layout_marginLeft="16dp"
        android:text="Go Offset:"
        tools:layout_editor_absoluteY="196dp"
        layout_constraintLeft_toLeftOf="parent"
        layout_constraintTop_toBottomOf="@+id/consent.switch" />

    <TextView
        android:id="@+id/textView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Min (sec):"
        android:layout_marginLeft="16dp"
        layout_constraintLeft_toLeftOf="parent"
        layout_constraintTop_toBottomOf="@+id/textView7" />

    <TextView
        android:id="@+id/textView9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:text="Max (sec):"
        tools:layout_editor_absoluteY="290dp"
        layout_constraintLeft_toLeftOf="parent"
        layout_constraintTop_toBottomOf="@+id/textView8" />

    <EditText
        android:id="@+id/offset.min"
        android:layout_width="38dp"
        android:layout_height="32dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="1"
        tools:layout_editor_absoluteY="233dp"
        tools:layout_editor_absoluteX="107dp"
        layout_constraintLeft_toLeftOf="parent"
        layout_constraintTop_toBottomOf="@+id/textView9" />

    <EditText
        android:id="@+id/offset.max"
        android:layout_width="37dp"
        android:layout_height="38dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="4"
        tools:layout_editor_absoluteY="290dp"
        tools:layout_editor_absoluteX="108dp"
        layout_constraintLeft_toLeftOf="parent"
        layout_constraintTop_toBottomOf="@+id/offset.min" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="toO1Login"
        android:text="Next >>"
        tools:layout_editor_absoluteY="398dp"
        android:layout_marginLeft="16dp"
        layout_constraintLeft_toLeftOf="parent"
        layout_constraintTop_toBottomOf="@+id/offset.max" />

</android.support.constraint.ConstraintLayout>

我的问题:为什么我的 分钟(秒) TextView 是唯一显示在正确位置的小部件?我需要对其他 widgets/views 做些什么才能使它们也正确定位?

您的视图不受垂直限制。您应该在某些时候使用某种类型的 layout_constraintTop_toTopOf 等。

您的 "Min (Sec)" 视图是唯一正确显示的视图,因为它是唯一一个垂直受限的视图。将您的代码更改为如下内容:

<?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"
    android:layout_width="match_parent"                                             
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="156dp"
        android:layout_height="27dp"
        android:layout_marginLeft="16dp"
        android:text="Match Setup"
        android:textSize="18sp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <TextView
        android:id="@+id/textView5"
        android:layout_width="146dp"
        android:layout_height="23dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="32dp"
        android:text="Consent Type:"
        android:textSize="14sp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView"/>

    <RadioButton
        android:id="@+id/consent.voice"
        android:layout_width="166dp"
        android:layout_height="31dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="202dp"
        android:checked="true"
        android:defaultFocusHighlightEnabled="false"
        android:text="Voice-Activated"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView5"/>

    <RadioButton
        android:id="@+id/consent.switch"
        android:layout_width="201dp"
        android:layout_height="28dp"
        android:layout_marginLeft="16dp"
        android:text="Connected Switches"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/consent.voice"/>

    <TextView
        android:id="@+id/textView7"
        android:layout_width="129dp"
        android:layout_height="19dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="32dp"
        android:text="Go Offset:"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/consent.switch"/>

    <TextView
        android:id="@+id/textView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:text="Min (sec):"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView7"/>

    <TextView
        android:id="@+id/textView9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="32dp"
        android:text="Max (sec):"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView8"/>

    <EditText
        android:id="@+id/offset.min"
        android:layout_width="38dp"
        android:layout_height="32dp"
        android:layout_marginLeft="16dp"
        android:ems="10"

        android:inputType="textPersonName"
        android:text="1"
        app:layout_constraintBottom_toBottomOf="@id/textView8"
        app:layout_constraintLeft_toRightOf="@id/textView8"
        app:layout_constraintTop_toTopOf="@id/textView8"/>

    <EditText
        android:id="@+id/offset.max"
        android:layout_width="37dp"
        android:layout_height="38dp"
        android:layout_marginLeft="16dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="4"
        app:layout_constraintBottom_toBottomOf="@id/textView9"
        app:layout_constraintLeft_toRightOf="@id/textView9"
        app:layout_constraintTop_toBottomOf="@+id/offset.min"
        app:layout_constraintTop_toTopOf="@id/textView9"/>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="32dp"
        android:layout_marginLeft="16dp"
        android:onClick="toO1Login"
        android:text="Next >>"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"/>

</android.support.constraint.ConstraintLayout>