Android 将constraintlayout元素显示为recyclerview项
对于一个项目,我需要使用由X个ConstraintLayout元素(项)组成的RecyclerView。问题是,我已经为特定项创建了布局文件,但视图从未正确渲染。仅当我设置items ConstraintLayout元素的minWidth&minHeight元素时,才会渲染项目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
<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中添加背景色时,屏幕上会填充适当数量的该颜色。不过我今晚晚些时候回家时会设法把它修好。当我找到解决方案时,我会向你汇报