Android 将constraintlayout元素显示为recyclerview项

Android 将constraintlayout元素显示为recyclerview项,android,android-layout,Android,Android Layout,对于一个项目,我需要使用由X个ConstraintLayout元素(项)组成的RecyclerView。问题是,我已经为特定项创建了布局文件,但视图从未正确渲染。仅当我设置items ConstraintLayout元素的minWidth&minHeight元素时,才会渲染项目 <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xm

对于一个项目,我需要使用由X个ConstraintLayout元素(项)组成的RecyclerView。问题是,我已经为特定项创建了布局文件,但视图从未正确渲染。仅当我设置items ConstraintLayout元素的minWidth&minHeight元素时,才会渲染项目

<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.support.constraint.Guideline
    android:id="@+id/end_cardview_element"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent="0.30" />

<android.support.constraint.Guideline
    android:id="@+id/start_image_element"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent="0" />

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

<android.support.constraint.Guideline
    android:id="@+id/start_vertical_border"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.04" />

<android.support.constraint.Guideline
    android:id="@+id/end_vertical_border"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.41" />

<android.support.constraint.Guideline
    android:id="@+id/end_image_icon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.12" />

<android.support.constraint.Guideline
    android:id="@+id/end_text_place"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.32" />

<android.support.constraint.Guideline
    android:id="@+id/mid_text_element"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent="0.275" />

<android.support.constraint.Guideline
    android:id="@+id/start_title_element"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.13810316" />

<android.support.constraint.Guideline
    android:id="@+id/start_text_element"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent="0.06" />

<android.support.constraint.Guideline
    android:id="@+id/end_text_element"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent="0.2" />

<ImageView
    android:id="@+id/route_background"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toTopOf="@+id/end_image_element"
    app:layout_constraintEnd_toStartOf="@+id/end_vertical_border"
    app:layout_constraintStart_toStartOf="@+id/start_vertical_border"
    app:layout_constraintTop_toTopOf="@+id/start_image_element" />

<ImageView
    android:id="@+id/route_icon"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toTopOf="@+id/end_cardview_element"
    app:layout_constraintEnd_toStartOf="@+id/end_image_icon"
    app:layout_constraintStart_toStartOf="@+id/start_vertical_border"
    app:layout_constraintTop_toTopOf="@+id/end_image_element"
    app:srcCompat="@drawable/icon_swimming" />

<android.support.v7.widget.AppCompatTextView
    android:id="@+id/route_place"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:text="Lochem"
    app:autoSizeMaxTextSize="24sp"
    app:autoSizeMinTextSize="12sp"
    app:autoSizeStepGranularity="2sp"
    app:autoSizeTextType="uniform"
    app:layout_constraintBottom_toTopOf="@+id/mid_text_element"
    app:layout_constraintEnd_toStartOf="@+id/end_text_place"
    app:layout_constraintStart_toStartOf="@+id/end_image_icon"
    app:layout_constraintTop_toTopOf="@+id/end_image_element" />

<android.support.v7.widget.AppCompatTextView
    android:id="@+id/route_time"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:text="2 hours"
    app:autoSizeMaxTextSize="24sp"
    app:autoSizeMinTextSize="12sp"
    app:autoSizeStepGranularity="2sp"
    app:autoSizeTextType="uniform"
    app:layout_constraintBottom_toTopOf="@+id/end_cardview_element"
    app:layout_constraintEnd_toStartOf="@+id/end_text_place"
    app:layout_constraintStart_toStartOf="@+id/end_image_icon"
    app:layout_constraintTop_toTopOf="@+id/mid_text_element" />

<android.support.v7.widget.AppCompatTextView
    android:id="@+id/route_title"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:text="TextView"
    android:textColor="@color/white"
    app:autoSizeMaxTextSize="24sp"
    app:autoSizeMinTextSize="16sp"
    app:autoSizeStepGranularity="2sp"
    app:autoSizeTextType="uniform"
    app:layout_constraintBottom_toTopOf="@+id/end_text_element"
    app:layout_constraintEnd_toStartOf="@+id/end_text_place"
    app:layout_constraintStart_toStartOf="@+id/start_title_element"
    app:layout_constraintTop_toTopOf="@+id/start_text_element" />

所有子元素(TextView和ImageView)约束都设置为不同的准则(我在代码块中省略了这些准则,以使XML更易于阅读)。我不知道如何为此文件设置适当的约束,以便根据我设置的准则缩放元素。除了下面的XML之外,我还尝试通过将根元素与父元素相等来设置根元素的约束,但这并没有解决我的问题。非常感谢您的帮助

编辑1: 我可能忘了提一下,我正在使用一个百分比基本布局,以防这可能很重要

编辑2: 增加了指南

编辑3: 添加了recyclerview的代码

<android.support.v7.widget.RecyclerView
    android:id="@+id/suggested_routes_recyclerview"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:orientation="horizontal"
    app:layout_constraintBottom_toTopOf="@+id/end__recyclerview"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/end_text_title">


尝试在您的约束列表中使用包装内容,而不是匹配父项。这应该可以解决问题。

您的项目布局看起来不错,因此我认为问题与您的
回收视图的
维度有关。您可能将
RecyclerView的
layout\u width
layout\u height
设置为
wrap\u content
,这意味着它将只占用所需的空间。但是,它不知道需要多少空间,因为项目的布局完全基于父项的百分比(父项是
RecyclerView

如果您还尝试将
RecyclerView的
维度设置为
match\u parent
,请参见下文

要解决这个问题,您需要给
RecyclerView
一些空间来使用,如下所示:

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

或者使用布局中的其他
视图对其进行适当约束


重要提示:如果您的
RecyclerView
位于
ConstraintLayout
内,请不要对维度使用
match\u parent
。使用约束和
0dp
对尺寸标注进行
匹配\u约束
。使用
match\u parent
可能会导致文档中所述的意外结果。

在花了几个小时试图解决问题后,我设法找到了解决方案。问题不在于我没有以良好的方式设置约束,或者我的RecyclerView的大小不正确。真正的问题是我的数学技能不到位。因为这是显而易见的,我仍然认为这可能会帮助一些人,所以我将发布我的解决方案


当我从我的RecyclerView中使用的项目定义指导原则时,我是在计算整个屏幕的百分比大小,而不是使用单个项目的大小。因此,这导致项目显示非常小,这解释了为什么设置最小大小解决了我的问题。感谢大家查看我的XML

我尝试了你的建议,但结果还是一样,这意味着没有结果。请包括您的
指南
,以及很难判断布局是什么样的以及问题可能是什么。将指南添加到XML中实际上大部分是我的RecyclerView目前的样子。起初我认为问题在于我的约束条件不好。但我通过在我的recyclerview中添加背景色来测试这一点。这导致屏幕的预期部分被颜色填充。我会将我的recyclerview代码添加到问题中。您必须固定子布局(即约束布局)的宽度或高度(如果为水平recyclerview布局,则为宽度;如果为垂直recyclerview布局,则为高度).我认为这不是问题所在,因为当我在recyclerview中添加背景色时,屏幕上会填充适当数量的该颜色。不过我今晚晚些时候回家时会设法把它修好。当我找到解决方案时,我会向你汇报