ConstraintLayout:无法包装内容和堆栈RecyclerView项

时间:2018-07-26 00:14:15

标签: java android xml android-recyclerview android-constraintlayout

我有一个RecyclerView,我正在尝试使用CardView对象进行填充。每个目录的根视图都是ConstraintLayout。

我希望Recyclerview中的卡片各自占据垂直屏幕空间的25%并堆叠。我使用了各种准则来设置这些约束。

我注意到,虽然我可以查看CardView,但betweeen卡中有足够的空间。当我希望CardView彼此堆叠时,似乎RecyclerView正在填充与match_parent高度相同的视图:

RecyclerView:

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

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view_ingredients"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

</android.support.v7.widget.RecyclerView>

个人CardView:

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

<android.support.constraint.Guideline
    android:id="@+id/guideline_zero"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_constraintGuide_percent=".025" />

<android.support.constraint.Guideline

    android:id="@+id/guideline_one"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.975" />

<android.support.constraint.Guideline
    android:id="@+id/guideline_two"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent="0.025" />

<android.support.constraint.Guideline
    android:id="@+id/guideline_four"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent="0.25" />

<android.support.v7.widget.CardView
    android:id="@+id/recipe_cardview"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintEnd_toStartOf="@+id/guideline_one"
    app:layout_constraintStart_toStartOf="@+id/guideline_zero"
    app:layout_constraintTop_toTopOf="@+id/guideline_two"
    app:layout_constraintBottom_toTopOf="@+id/guideline_four">

    <TextView
        android:id="@+id/id_of_recipe_item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

    </android.support.v7.widget.CardView>
</android.support.constraint.ConstraintLayout>

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

ConstraintLayout决定每个RecyclerView项目的高度。由于ConstraintLayout的高度为match_parent,因此每个项目都会占据整个屏幕。在ConstraintLayout内,CardView将占25%。剩余的75%将为空白。这就是为什么您看到报告的原因。

因此,您需要一种使ConstraintLayout为屏幕高度的25%的方法。不幸的是,除非通过代码,否则无法直接为RecyclerView的子级指定25%的高度。 (并非完全正确:例如,如果您在RecyclerVIew处定义了100dp,则可以将ConstraintLayout定义为25dp并对其进行处理。我假设您不想在代码中指定确切的高度。)

要达到25%的高度,您需要确定RecyclerView 布局后的高度,并在{{1}中设置ConstraintLayout的高度onCreateViewHolder()的适配器}。