创建动态大小的Flex列表组件

时间:2010-08-16 05:37:25

标签: flex list dynamic size components

我知道有很多关于Flex组件的动态大小的问题,但是这个问题非常具体,而其他答案并没有很多帮助。简而言之,我需要一个调整大小以完全适合其内容的List,除非该高度超过其(动态大小)父容器。我的要求如下:

  • 该组件扩展了List,或者至少采取类似的行为。
  • variableRowHeightwordWrap都等于true
  • 列表的高度不能小于minHeight(滚动条箭头大约为32px)。
  • 列表的高度不能大于父容器的高度。
    • 请注意,可以动态调整父容器的大小。
  • 应更新列表的高度,因为内容和父容器的大小都会更改。
    • 实时更新会更好,但不是必需的。
  • 如果内容高度小于父容器高度,则应该没有滚动条(听起来很明显,但我也遇到了麻烦)。

问题在于variableRowHeightwordWrap,在任何给定时间都很难知道内容的大小。如果父容器的宽度减小,则列表中可能会出现换行,这将改变内容的高度。我知道我可以使用measureHeightOfItems() + viewMetrics.top + viewMetrics.bottom来衡量列表内容的高度,但什么时候应该计算出来?我应该听哪些事件?而我遇到的最麻烦的事情是 - 我应该在什么时候计算它来设置最初的大小(即内容已经完成填充)?

我几个月来一直在处理这个问题,但是却找不到解决方案(尽管我已经接近了不同程度不可理解的代码块)。我不是要求有人为我创建一个完整的组件,我只是希望有人有正确的指示,让我知道如何确定和更新大小。我很高兴为您做所有的原型设计并讨论结果:)

1 个答案:

答案 0 :(得分:1)

自定义Flex组件绝对是他们自己的野兽。你花了好几个月的时间在一个人身上投入了很多精力!

如果你还没有看过,你当然应该看看Flex Component Lifecycle。这将回答您关于执行代码的位置的问题。我相信measure()commitProperties()对您的组件非常重要。

在管理具有动态大小的子级和/或父级的组件时,我还发现validateNow()是一个非常有用的功能。我还没有想出何时调用此函数的最佳时间,但在计算Flex组件的大小时似乎是必要的。在judah's blog上有一篇关于它的信息性文章。

祝你好运!

更新 - 我偶然发现了一篇关于DevelopmentArc的Flex组件生命周期的看似精彩的文章,我正在添加到我自己的阅读列表中。