【问题标题】:In Flex, how do wrap Lists into columns?在 Flex 中,如何将列表包装成列?
【发布时间】:2010-12-16 01:49:37
【问题描述】:

如何使 List 控件环绕到第二列(或多列)?谢谢,如果有使用 List 控件或其他 Flex 控件的解决方案,请告诉我。

例如,如果您有一个包含 42 项的列表,但我想将列表的高度限制为 20 项;然后我不会有一个包含 42 个项目的列表,而是让项目列表看起来相当于 3 个相邻列表:第一个有 20 个项目,第二个有 20 个项目,第三个有 2 个项目(其中表示 42 项的原始列表)。

这个问题看起来很相似,但在 ColdFusion 中:
Wrapping lists into columns

【问题讨论】:

  • 它类似于“自动换行”,但不是与文本标签严格关联的自动换行,因此它跨越两行而不是仅仅一行(可能是为了避免截断文本)。
  • 抱歉给我带来了困惑,我绝对不想要自动换行,因为自动换行为每个项目提供了更多行。让我修改一下我的问题。

标签: apache-flex actionscript-3 adobe mxml


【解决方案1】:

使用 TileList 并更改方向变量是我想出的最佳解决方案。

【讨论】:

    【解决方案2】:

    您可以对列表项使用Repeater 和一个简单的基于标签的itemRenderer,并完全避免使用列表。如果您将其全部封装在自定义控件中,您可以提供与 List 相同的 API,这样您的消费者就永远不会分辨出区别。

    【讨论】:

      【解决方案3】:

      我认为您正在寻找第二排,正如其他人所指出的那样。将 wordWrap 设置为 true 或使用不同的项目渲染器是完成它的最佳方式,但使用自定义项目渲染器可以让您更好地控制对象的显示方式。

      【讨论】:

      • 我希望对这个答案投反对票的人能告诉我们原因。我认为这个解决方案有效。
      【解决方案4】:

      我建议创建一个包含可变数量列表的自定义组件。这个自定义组件可以有一个名为“maxListHeight”的属性。它也可以有一个“dataProvider”属性。这个自定义组件将生成一组水平对齐的列表。自定义组件生成的列表数量将为:floor(dataProvider.length/maxListHeight)+1。除了最后一个列表之外的所有列表都将具有 maxListHeight 的 listHeight;最后生成的列表的 listHeight 为:dataProvider.length % maxListHeight。

      这应该可行,但是管理向 masterList 中添加和删除项目应该需要一些额外的工作(如果它没有从后面附加/删除)。这还需要实例化多个列表,而不仅仅是一个。

      【讨论】:

      • 这个想法应该可行,但我不喜欢它必须依赖于实例化多个相邻列表。
      • 我也不喜欢这个解决方案,因为当您从生成的列表中选择一个项目时,您还需要添加逻辑以取消选择所有其他 list.selectedItem。
      【解决方案5】:

      List 控件的默认itemRendererTextInput,它仅支持单行文本。请改用TextArea

      <mx:List itemRenderer="mx.controls.TextArea"/>
      

      【讨论】:

        【解决方案6】:

        尝试在 List 上设置以下两个属性:

        wordWrap=true
        variableRowHeight=true
        

        【讨论】:

          猜你喜欢
          • 2010-09-05
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-22
          • 2018-08-03
          • 2019-01-25
          • 2018-04-19
          相关资源
          最近更新 更多