片段约束布局在主 activity 的选项卡顶部拉伸

Fragment constraint layout stretching on top of tabs of the main activity

我已经构建了一个带有 ListView、空视图和总计数视图的约束布局片段。底部约束正在工作(尽管进行了人为调整),但顶部与我的 MainActivity:

中的选项卡重叠

我的代码在这里,这是我第一次使用约束布局:

{ 
 <?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">



    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toTopOf="@id/total_items_view"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.98"
        tools:layout_editor_absoluteX="8dp" />

    <TextView
        android:id="@+id/total_items_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/colorOrange"
        android:padding="4dp"
        android:text="Items in this category: "
        android:textSize="28sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        app:layout_constraintRight_toLeftOf="@id/items_number_view"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/items_number_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/colorOrange"
        android:padding="4dp"
        android:text="44"
        android:textSize="28sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        app:layout_constraintLeft_toRightOf="@id/total_items_view" />


    <RelativeLayout
        android:id="@+id/empty_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:visibility="gone">

        <ImageView
            android:id="@+id/empty_book_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:src="@drawable/orange_orange_book" />

        <TextView
            android:id="@+id/empty_title_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/empty_book_image"
            android:layout_centerHorizontal="true"
            android:fontFamily="sans-serif-medium"
            android:paddingTop="16dp"
            android:text="This category is still empty..."
            android:textAppearance="?android:textAppearanceMedium" />

        <TextView
            android:id="@+id/empty_subtitle_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/empty_title_text"
            android:layout_centerHorizontal="true"
            android:fontFamily="sans-serif"
            android:paddingTop="8dp"
            android:text="Let's start with adding books!"
            android:textAppearance="?android:textAppearanceSmall"
            android:textColor="#A2AAB0" />
    </RelativeLayout>


</android.support.constraint.ConstraintLayout> 
}

有什么方法可以在单独的(主)activity 中为视图设置约束?我该如何解决这个问题?

我已经试过了wrap_content,我唯一能想到的就是手动设置它有点偏离顶部,这有点破坏约束布局的概念。

谢谢。

您不能在约束布局之外应用约束。问题出在父布局上,您的视图寻呼机似乎与选项卡布局重叠。

首先,不要在ConstraintLayout中使用match_parent,例如。如果你想让视图匹配屏幕宽度,请使用

android:layout_width="0dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"

它重叠的原因是您可能没有像

那样将列表(或列表容器)的顶部限制到此顶部视图的底部
app:layout_constraintTop_toBottomOf="@+id/top_view"

您的 ListView's 高度设置为 wrap_content 在这种情况下,它会根据需要扩展并与其他视图重叠。如果您想同时使用 wrap_content 和强制执行视图的约束,则需要将 app:layout_constrainedHeight="true" 属性添加到您的 ListView.