如何使RecyclerView表现得像段落?

时间:2019-03-30 07:00:37

标签: android android-recyclerview

我想查看一下,其中某些行显示为段落(即不是垂直列表而是段落)。但我也希望每一行都可以单击,以便提示用户共享该特定行。

我实际上是在构建带有翻译的《古兰经》应用程序。我希望用户单独阅读古兰经(第一张图片)和翻译(第二张图片)。但是我想要独立版本(如下面的第一个图像)为段落格式。如何使用RecyclerView实现这一目标(因为我已经使用RecyclerView实现了翻译版本)?

换句话说,我知道如何在单个RecyclerView中使用两个视图,但是(请参阅第一张图像的3-5行)如何使用RecyclerView将一个布局变形为另一个布局

编辑:我尝试过flexbox,但不满足要求。 standalone with translation

1 个答案:

答案 0 :(得分:1)

答案是FlexBoxLayoutManager,您可以将其与RecyclerView put一起使用

    implementation 'com.google.android:flexbox:1.0.0'

在您的gradle文件中。现在设置RecyclerView布局,

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:layout_marginBottom="5dp"
    xmlns:toools="http://schemas.android.com/tools">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@id/end_indicator"
    android:textSize="20sp"
    android:layout_marginEnd="5dp"
    android:layout_marginStart="5dp"
    android:textDirection="anyRtl"
    android:id="@+id/line_holder"
    />
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@android:color/black"
    android:layout_marginStart="5dp"
    android:layout_alignBaseline="@id/line_holder"
    android:gravity="center_vertical|center_horizontal"
    android:textAlignment="gravity"
    android:layout_marginEnd="5dp"
    android:background="@drawable/stackoverflow_bg"
    android:id="@+id/end_indicator"/>
</RelativeLayout>

此处stackoverflow_bg.xml是可绘制的椭圆形。 现在设置RecyclerView,

 FlexboxLayoutManager manager = new FlexboxLayoutManager(this);
    manager.setJustifyContent(JustifyContent.CENTER);
    manager.setFlexWrap(FlexWrap.WRAP);
    manager.setFlexDirection(FlexDirection.ROW_REVERSE);
    rv.setLayoutManager(manager);
    rv.setAdapter(rvAdapter);

我制作的布局: recyclerview 如您所见,此布局需要一些工作。结束指示器必须与TextView的最后一行对齐,然后它才能解决问题。现在,您甚至可以处理行单击事件,因为这都是在Recyclerview中完成的。