是否可以限制RecyclerView的FlexboxLayoutManager中的特定行?

时间:2018-03-13 13:47:23

标签: android android-recyclerview flowlayout android-flexboxlayout

背景

我需要以列表方式创建详细信息屏幕的UI,其中包括各种字段。这就是为什么我选择使用RecyclerView,因为可能有很多字段,我不希望所有视图都会从开始时被夸大。

问题

在其中一行中,我实际上必须放置标签。该行有一个像大多数其他行一样的标题,并且可能像右边的大多数一样有一个图标,但真正的内容是标签本身。如果没有更多空间,它们会换行。

类似的东西:

enter image description here

您看到的是一行标题,侧面图标和标签。标签集合在两侧有边距,在需要时包裹到下一行,并占据图标下方的空间。

我发现了什么

Google有一个名为"flexbox-layout"的很好的库(类似于各种流布局库),它允许在没有更多空间的情况下进行视图包装。它还允许对RecyclerView使用FlexboxLayoutManager,以便在可能的情况下回收视图。它可以很容易地初始化。例如:

val layoutManager = FlexboxLayoutManager(activity)
layoutManager.flexDirection = FlexDirection.ROW
layoutManager.flexWrap = FlexWrap.WRAP
layoutManager.justifyContent = JustifyContent.FLEX_START
layoutManager.alignItems = AlignItems.FLEX_START 
recyclerView.layoutManager=layoutManager

这将使视图一个接一个地横向移动,并在需要时换行到下一行。

现在有两种方法,我认为我可以使用它,但两者都有问题:

  1. 让整个RecyclerView使用单个FlexboxLayoutManager,其中所有行都采用整个宽度(match_parent),除了此部分,标记占用wrap_content。这有效,但后来我找不到如何设置边缘的边距(右边和左边的标签,而不是中间的标签)。

  2. 拥有一个只有标签的嵌套RecyclerView。内部RecyclerView将在一行中,其布局在右侧有图标,边上有边距。边距有效,因为它在自己的行内有布局。但是,由于它是嵌套的RecyclerView,所有视图都会同时膨胀,而不是被回收。这意味着,如果我有100个标签,当我到达此行时,他们的所有视图都会膨胀。这对性能不利。如果它是一个带有LinearLayoutManager的水平RecyclerView,这不会有问题(它在那里工作正常),但事实并非如此。

  3. 对于这两种方法,旁边的图标也存在问题,因为它应该仅占用空间,而在其下方可能有更多的标签。

    问题

    1. 是否可以设置特殊限制,例如右侧有一个图标,而所有其他视图都相应地包装?

    2. 是否可以只有侧面标签(每行的第一个和最后一个)视图有边距,而不是其他视图?

    3. 是否可以使用嵌套的RecyclerView而不会丢失其回收机制?

0 个答案:

没有答案