android - 将 constraintlayout 元素显示为 recyclerview 项目

标签 android android-layout

对于一个项目,我需要使用由 X 数量的 ConstraintLayout 元素(项目)组成的 RecyclerView。问题是我已经为特定项目创建了布局文件,但 View 从未正确呈现。仅当我设置项目 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" />

所有子元素(TextViews 和 ImageViews)约束都设置为不同的准则(我将其排除在代码块之外以使 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 的大小不正确。真正的问题是我的数学技能没有达到要求。由于这是显而易见的事情,我仍然认为这可能会对某些人有所帮助,所以无论如何我都会发布我的解决方案。

当我根据我的 RecyclerView 中使用的项目定义指南时,我计算的是整个屏幕的百分比大小,而不是使用单个项目的大小。所以这导致项目显示得非常小,这解释了为什么设置最小尺寸解决了我的问题。感谢任何人看我的 XML

关于android - 将 constraintlayout 元素显示为 recyclerview 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51384453/

相关文章:

android - ImageView 上的绘图 : how to layout?

Android:居中图像

java - Android应用程序,从res读取文本文件

android - 将动态线性布局添加到当前 View android

android - 完成尚未停用或关闭的游标 - ormlite android sqlcipher

Android:如何从 PreferenceActivity/PreferenceFragment 外部打开 ListPreference 对话框?

android - 为 android UI 试验 xmls。想知道是否有更好的方法来完成我的任务

java - 带有 id 的 RecyclerView 和 CoordinatorLayout 正在崩溃

Android:如何获得可移动SD卡的永久写入权限?

Android Studio 拒绝在我的手机上构建和安装任何应用