基于文本的RecyclerView中CardView的动态行高

时间:2018-01-07 06:47:11

标签: android android-layout android-recyclerview android-cardview

我希望制作一个基于文本内容动态调整自身大小的CardView(即当文本对于某些屏幕来说太长并且需要是多行时)。

Desired(这是通过将lines属性修改为2来实现的): enter image description here

但是,在测试和预览中,都会发生这种情况: enter image description here

我不确定解决此问题的可行方法是什么。必须以编程方式设置lines属性,或者我的XML布局有问题,或者RecyclerView的某些设置有问题?我的RecyclerView使用简单的LinearLayoutManager作为其LayoutManager。

下面提供了CardView的XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="wrap_content">

<android.support.v7.widget.CardView
    android:id="@+id/cv_uav"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cardCornerRadius="2dp"
    app:cardElevation="2dp"
    app:cardUseCompatPadding="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/imageView3"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:tint="#4b4b4b"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@drawable/ic_menu_quadcopter" />

        <TextView
            android:id="@+id/uav_message"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="16dp"
            android:layout_marginStart="16dp"

            android:layout_marginTop="16dp"
            android:singleLine="false"
            android:text="Telemedicine Drone Approaching!"
            android:textAppearance="@style/TextAppearance.AppCompat.Medium"
            app:layout_constraintBottom_toTopOf="@+id/textView4"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/imageView3"
            app:layout_constraintTop_toTopOf="parent" />

        <TextClock
            android:id="@+id/uav_eta"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:layout_marginStart="8dp"
            android:format24Hour="mm:ss"
            android:text="00:23"
            android:textAppearance="@style/TextAppearance.AppCompat.Large"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toEndOf="@+id/textView4" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:layout_marginStart="16dp"
            android:text="ETA:"
            android:textAppearance="@android:style/TextAppearance.Material.Large"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toEndOf="@+id/imageView3" />

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

2 个答案:

答案 0 :(得分:1)

在您的上下文中将列表行 CardView wrap_content。虽然您可以在onBindViewHolder内的recycleler视图中动态添加内容的高度,如下所示

created_at

答案 1 :(得分:0)

ConstraintLayout

将上面的代码替换为您现有的代码,我很难用鼠标管理LinearLayout,所以我将其更改为{{1}},这将实现您想要实现的目标。