更正损坏的 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 参数发生了变化。这正在挤压我的片段内容:)
我正在掌握约束布局,到目前为止,发现了一些不寻常的东西!
这是我迄今为止的努力:
这是我想要的布局方式。
至少可以说,在运行时,事情会变得有趣:
布局的 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 参数发生了变化。这正在挤压我的片段内容:)