我正在为类似Twitter的服务编写Adobe Air客户端。
在时间轴上(列表组件)我有一个自定义项目渲染器,它基本上是一个带有固定宽度图像和文本控件的Canvas,它是多行的。
如果文本足够长以更改画布高度,则只有在我手动更改窗口宽度时才会调整其大小,从而强制重绘所有渲染器。如果我只是滚动列表,所有“新”渲染器将具有可能的最小高度(即图像高度)。
在设置数据时如何强制重新测量渲染器的任何想法?
提前致谢! :)
答案 0 :(得分:0)
尝试在itemrender上调用invalidateSize(),和/或在列表上调用invalidateDisplayList()
答案 1 :(得分:0)
我正在努力解决类似的失效/调整大小问题。本视频为我提供了构建自定义组件的一些信息。希望它有所帮助。
这是一个关于adobe工程师的精彩视频的链接,该视频讲述了如何在Action脚本中创建flex组件。
http://tv.adobe.com/watch/max-2008-develop/creating-new-components-in-flex-3-by-deepa-subramaniam/
答案 2 :(得分:0)
您是否尝试为列表设置variableRowHeight=true
?
答案 3 :(得分:0)
如果您处理updateComplete事件,则可以重新计算其大小。它可能过度杀死,因为每次绘制itemrenderer时都会发生updateComplete,但它可以正常工作。
答案 4 :(得分:0)
首先,您必须将variableRowHeight
设为true;
在itemRenderer
中,您应该关闭verticalScrollPolicy
(我假设您已经这样做了),并对文本控件执行相同的操作。同时将文本的高度设置为100%。
我没有在Flex4中尝试过,但在以前的版本中我必须有一个VBox作为itemRenderer
的root用户,以便根据文本的内容调整大小,所以你应该考虑使用{{1} }实例而不是VBox / VGroup
。
答案 5 :(得分:0)
我遇到了一个非常类似的问题,即使用需要根据文本调整大小的标签来调整数据网格中的项目渲染器。问题是多行文本组件需要两次传递才能正确更新。这适用于大多数控件,因为它们不断更新和定位。它在列表或网格中失败,因为更改发生时的第一次更新会强制列表测量项呈示器,然后根据返回的结果设置其行的高度。项呈示器然后第二次更新自身(此时正确测量自身),但列表不查找这些更新更改。我采取强制验证测量过程中的标签(文本控件)来正确调整文本组件的大小,以便渲染器在任何更改后报告第一次更新过程的正确测量高度。我的任务(以及我后来发现的anser和一些讨论)在这里:ItemRenderer hieght (and height changes) not reflected in AdvancedDataGrid row