Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否可以限制RecyclerView的FlexboxLayoutManager中的特定行? 背景_Android_Android Recyclerview_Flowlayout_Android Flexboxlayout - Fatal编程技术网

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

Android 是否可以限制RecyclerView的FlexboxLayoutManager中的特定行? 背景,android,android-recyclerview,flowlayout,android-flexboxlayout,Android,Android Recyclerview,Flowlayout,Android Flexboxlayout,我需要创建一个详细信息屏幕的UI,它以列表的方式包含各种字段。这就是我选择使用RecyclerView的原因,因为可能有很多字段,我不希望所有视图从一开始就膨胀 问题 在其中一行中,我实际上必须放置标签。该行与大多数其他行一样有标题,并且可能与大多数行一样在右侧有图标,但真正的内容是标记本身。如果没有更多的空间,它们将被包裹 诸如此类: 您看到的是一行,其中有标题、侧面的图标和标记。“标记”集合的侧面有一个边距,需要时可以换行到下一行,并占用图标下方的空间 我发现了什么 Google有一个很好

我需要创建一个详细信息屏幕的UI,它以列表的方式包含各种字段。这就是我选择使用RecyclerView的原因,因为可能有很多字段,我不希望所有视图从一开始就膨胀

问题 在其中一行中,我实际上必须放置标签。该行与大多数其他行一样有标题,并且可能与大多数行一样在右侧有图标,但真正的内容是标记本身。如果没有更多的空间,它们将被包裹

诸如此类:

您看到的是一行,其中有标题、侧面的图标和标记。“标记”集合的侧面有一个边距,需要时可以换行到下一行,并占用图标下方的空间

我发现了什么 Google有一个很好的库(类似于各种流布局库),它允许在没有更多空间的情况下进行视图换行。它还允许对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
这将使视图一个接一个地水平移动,并在需要时换行到下一行

现在有两种方法可以使用,但都有问题:

  • 让整个RecyclerView使用一个
    FlexboxLayoutManager
    ,其中所有行都采用整个宽度(
    match\u parent
    ),但此部分除外,其中标记采用
    wrap\u content
    。这是可行的,但我找不到如何单独设置两侧标签的边距(右侧和左侧,但中间的标签除外)

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

  • 对于这两种方法,还有一个侧面图标的问题,因为它应该只在那里占据空间,在它下面可能有更多的标签

    问题
  • 是否可能有特殊的限制,例如在右侧有一个图标,而所有其他视图都相应地进行包装

  • 是否可能只有侧标签(每行的第一个和最后一个)视图有边距,而其他视图没有边距

  • 是否有可能拥有嵌套的RecyclerView而不丢失其回收机制


  • 将每行中的标签包装在各自的
    FlexboxLayout
    中,并将
    FlexboxLayout
    和其他视图包装在
    ConstraintLayout
    LinearLayout
    中。这样,您就可以独立地控制
    FlexboxLayout
    外部的视图和布局内部的视图,只需使用类似于
    RecyclerView
    的线性布局管理器。不过,这比那更复杂吗?@Cheticamp我不明白你的意思。你能不能用视觉的方式,或者用代码的方式来显示它?就像这个布局检查器的照片所示@切蒂坎普,我不明白你做了什么。截图没有显示我写的东西。它并没有把“美国可卡西班牙”的文字放在图片下方。只在它的左边。我也不明白这是如何解决视图回收的,所以你想做一些类似的事情?