如何在Constraint Layout中修复不必要的空间?

时间:2018-06-04 20:45:50

标签: android xml android-constraintlayout

我有Constraint Layout。目标是将两个recyclerview堆叠在一起。我使用Constraint Layout的原因是因为我还希望TextView占据与底部recyclerview相同的空间。 (当TextView底部没有内容时,我会以编程方式将recyclerview设置为可见。

这是布局:

<?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="250dp"
    android:background="@color/heart_red"
    tools:context=".MainActivity">


    <android.support.v7.widget.RecyclerView
        android:id="@+id/tabRecyclerView"
        android:layout_width="0dp"
        android:layout_height="50dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toTopOf="@id/imageRecyclerView"
        app:layout_constraintTop_toTopOf="parent" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/imageRecyclerView"
        android:layout_width="0dp"
        android:layout_height="200dp"
        android:background="@color/lightshade"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="@id/tabRecyclerView" />


</android.support.constraint.ConstraintLayout>

此外,这是我imageRecyclerView列的布局:

<?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="wrap_content"
    android:layout_height="match_parent"
    android:background="@color/darkshade">

    <ImageView
        android:id="@+id/itemImage"
        android:adjustViewBounds="true"
        android:scaleType="fitStart"
        android:layout_width="wrap_content"
        android:layout_height="150dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@id/itemFavoriteButton"/>

    <me.zhanghai.android.materialprogressbar.MaterialProgressBar
        android:id="@+id/itemProgressBar"
        android:indeterminate="true"
        android:layout_width="wrap_content"
        android:layout_height="150dp"
        app:layout_constraintLeft_toRightOf="parent"
        app:layout_constraintRight_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@id/itemFavoriteButton"/>

    <ToggleButton
        android:id="@+id/itemFavoriteButton"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/ic_favorite"
        android:textOff=""
        android:textOn=""
        android:text=""
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/itemImage"
        app:layout_constraintBottom_toBottomOf="parent"/>


</android.support.constraint.ConstraintLayout>

但是,出于某种原因,Constraint Layout底部有一个红条,如下所示:

Screenshot Of Phone

据我所知,从数学上讲,一切都会检验出来。那么为什么我的布局底部会出现一个红条呢?

1 个答案:

答案 0 :(得分:2)

你正试图将recyclerviews叠加在一起,对吗?

目前,您无法将tabRecyclerView和imageRecyclerView的高度相加,因为它们相互重叠。

查看

  • 父级布局高度为250dp

  • tabRecyclerView为50dp

  • imageRecyclerView是200dp(但因为这行app:layout_constraintTop_toTopOf="@id/tabRecyclerView",它的重叠tabRecyclerView)
  • 缺少50dp(这就是父母的红色背景出现的原因)

修复

更改

app:layout_constraintTop_toTopOf="@id/tabRecyclerView"

app:layout_constraintTop_toBottomOf="@id/tabRecyclerView"