更正损坏的 ConstraintLayout

Correcting a broken ConstraintLayout

我正在掌握约束布局,到目前为止,发现了一些不寻常的东西!

这是我迄今为止的努力:

这是我想要的布局方式。

至少可以说,在运行时,事情会变得有趣:

布局的 XML 是:

    <FrameLayout 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="my.first.FFragment">

    <!-- TODO: Update blank fragment layout -->

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/boxStatusLabel"
            android:layout_width="0dp"
            android:layout_height="19dp"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="20dp"
            android:layout_marginTop="28dp"
            android:text="Status: "
            app:layout_constraintEnd_toStartOf="@+id/boxStatusField"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/boxStatusField"
            android:layout_width="0dp"
            android:layout_height="18dp"
            android:layout_marginEnd="176dp"
            android:layout_marginTop="28dp"
            android:text="Unknown"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/lastContactLabel"
            android:layout_width="0dp"
            android:layout_height="19dp"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="20dp"
            android:layout_marginTop="4dp"
            android:text="Last Contacted Time:"
            app:layout_constraintEnd_toStartOf="@+id/lastContactField"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/boxStatusLabel" />

        <TextView
            android:id="@+id/lastContactField"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="120dp"
            android:layout_marginTop="52dp"
            android:text="Not made contact"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <View
            android:id="@+id/homeLine1"
            android:layout_width="0dp"
            android:layout_height="2dp"
            android:background="@android:color/black"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/systemInUseNameField"
            android:layout_width="0dp"
            android:layout_height="21dp"
            android:layout_marginEnd="152dp"
            android:layout_marginTop="12dp"
            android:text="No system running"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/homeLine1" />

        <ImageView
            android:id="@+id/systemInUseImage"
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:layout_marginBottom="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:src="@drawable/systemInUseImage"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/homeLine1" />

        <TextView
            android:id="@+id/systemInUseLabel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="20dp"
            android:layout_marginTop="12dp"
            android:text="What's running:"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/homeLine1" />

    </android.support.constraint.ConstraintLayout>

</FrameLayout>

有人可以更正我的 XML,我可以将其加载回我的 Android Studio 进行研究以了解为什么我的尝试是错误的吗?将约束布局放在一起时对我的错误的解释也会有所帮助。

我的设备是这样的:

显示您的 class 正在膨胀此布局? (MainActivity 或 Fragment)。

另外,我建议将 layout_width 设置为非零。

编辑: 我们通过 IRC 讨论来解决问题。我们检查的事情: 1. 扩展 AppCompatActivity 和 android.support.v4.app.Fragment 2. 最后的问题是 main_activity.xml 和 android:layout_width="wrap_content" android:layout_height="wrap_content"

FragmentManager.replace() 不会像这样工作。请标记为正确和关闭。

你那里有很多硬编码的大小...你的父 FrameLayout 也没有用。

试试这个:

<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"
    android:layout_margin="20dp">

    <TextView
        android:id="@+id/boxStatusLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Status: "
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <TextView
        android:id="@+id/boxStatusField"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:text="Unknown"
        app:layout_constraintStart_toEndOf="@+id/lastContactLabel"
        app:layout_constraintTop_toTopOf="parent"/>

    <TextView
        android:id="@+id/lastContactLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:text="Last Contacted Time:"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/boxStatusLabel"/>

    <TextView
        android:id="@+id/lastContactField"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="4dp"
        android:text="Not made contact"
        app:layout_constraintStart_toEndOf="@+id/lastContactLabel"
        app:layout_constraintTop_toBottomOf="@+id/boxStatusLabel"/>

    <View
        android:id="@+id/homeLine1"
        android:layout_width="0dp"
        android:layout_height="2dp"
        android:background="@android:color/black"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <TextView
        android:id="@+id/systemInUseNameField"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:text="No system running"
        app:layout_constraintStart_toEndOf="@+id/systemInUseLabel"
        app:layout_constraintTop_toTopOf="@+id/systemInUseLabel"/>

    <ImageView
        android:id="@+id/systemInUseImage"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:src="@mipmap/ic_launcher"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/homeLine1"/>

    <TextView
        android:id="@+id/systemInUseLabel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:text="What's running:"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/homeLine1"/>

</android.support.constraint.ConstraintLayout>

问题是主要的 activity xml。我的问题 XML 在片段中。

此 Fragment 属于宽度和高度不正确的 FrameLayout。

我更改了我的主要 activity.xml 布局:

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="0dp"
    android:layout_marginStart="0dp"
    android:background="?android:attr/windowBackground"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:menu="@menu/navigation" />

<FrameLayout
    android:id="@+id/frame"

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="@dimen/activity_horizontal_margin"
    android:layout_marginStart="@dimen/activity_horizontal_margin"
    android:layout_marginTop="@dimen/activity_vertical_margin"
    android:text="Title bbb"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:layout_editor_absoluteX="8dp"
    tools:layout_editor_absoluteY="8dp">

</FrameLayout>

收件人:

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="0dp"
    android:layout_marginStart="0dp"
    android:background="?android:attr/windowBackground"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:menu="@menu/navigation" />

<FrameLayout
    android:id="@+id/frame"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="@dimen/activity_horizontal_margin"
    android:layout_marginStart="@dimen/activity_horizontal_margin"
    android:layout_marginTop="@dimen/activity_vertical_margin"
    android:text="Title bbb"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:layout_editor_absoluteX="8dp"
    tools:layout_editor_absoluteY="8dp">

</FrameLayout>

请注意 FrameLayout 的 layout_width 和 layout_height 参数发生了变化。这正在挤压我的片段内容:)