我有一个使用对象数组作为数据提供者的转发器。对于每个对象,我想在容器内创建一个标签。即使标签太长而无法显示,每个容器的大小也应相同。
<mx:HBox width="100%">
<mx:Repeater id="repeater" dataProvider="{objList}">
<mx:Box width="11%" verticalAlign="middle" horizontalAlign="center">
<mx:Label text="{repeater.currentItem.Text}" width="100%" textAlign="center" truncateToFit="true"/>
</mx:Box>
</mx:Repeater>
</mx:HBox>
如果我知道列表有9个项目,我可以将宽度设置为11%并且很开心。但我希望能够处理6-15项的清单。
我考虑过将框的宽度设置为函数的结果,但宽度不会接受字符串结果。返回一个数字只会将其设置为精确的宽度而不是百分比。
<mx:Box width="{GetPercent()}" verticalAlign="middle" horizontalAlign="center">
我还考虑在转发器项目上循环以设置percentWidth,但最好在渲染之前定义宽度。
答案 0 :(得分:0)
使用Spark标签,您只需将每个标签设置为100%宽度并强制它自动截断,如下所示:<s:Label showTruncationTip="true" maxDisplayedLines="1" width="100%"/>
。不确定它是否与MX标签组件相同。使用Spark组件,设置maxDisplayedLines
以使截断正常工作也很重要。
答案 1 :(得分:0)
由于我没有火花,我最终通过用Canvas(将clipContent设置为true)替换Box来实现这一点。奇怪的是,我还必须从标签中删除width =“100%”(当然将horizontalCenter设置为0)。
<mx:Repeater id="repeater" dataProvider="{objList}">
<mx:Canvas verticalScrollPolicy="off" horizontalScrollPolicy="off" clipContent="true">
<mx:Label text="{repeater.currentItem.Text}" horizontalCenter="0" textAlign="center"/>
</mx:Canvas>
</mx:Repeater>