在我的flex应用程序中,我有一个<mx:Text>
控件,其高度和宽度足以显示两行。现在,如果文本太长而无法以两行显示,我希望将其截断并显示省略号(...)。带有省略号的默认截断似乎与标签一起出现,但标签不能以两行显示文本。
如何在flex <mx:Text>
控件中模仿此行为?在此先感谢!!!
答案 0 :(得分:4)
spark.components.Label
组件从maxDisplayedLines
继承spark.components.supportClasses.TextBase
属性。以下是该特定属性的帮助:
一个整数,用于确定文本是否以及在何处被截断。
截断文本意味着用截断指示符(例如“...”)替换多余的文本。截断指示符取决于区域设置;它由“core”资源包中的“truncationIndicator”资源指定。
如果值为0,则不会发生截断。相反,如果文本不适合组件的范围,则会简单地剪切文本。
如果值为正整数,则必要时将截断文本以将行数减少为此整数。
如果值为-1,则文本将被截断以显示尽可能多的行以完全适合组件的高度。
仅当lineBreak样式为“toFit”时才执行截断;如果lineBreak是“显式”,则忽略此属性的值。
默认值为0.
从中可以看出,如果将maxDisplayedLines属性设置为-1,则组件将显示尽可能多的文本,如果必须截断文本,则附加“...”。
答案 1 :(得分:1)
Flex 3中的Text类恰好是Label的子类。这意味着将Text控件上的“truncateToFit”属性设置为true就足够了。
答案 2 :(得分:1)
我发现的最佳解决方案是通过spark Label和maxDisplayedLines属性,如下所示:
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:s="library://ns.adobe.com/flex/spark" >
<s:Label text="{data.Name}" maxDisplayedLines="3" verticalAlign="middle" />
</mx:Canvas>
完美地为我工作。 一般来说,我发现spark label比mx Label更好,但是YMMV。
答案 3 :(得分:1)
我知道这是一个老帖子,但很多人仍在开发和维护混合的Spark / MX项目。因此,我将为仍然面临此问题的人提供两美分,特别是在使用MX列表和数据网格时,需要在渲染器中进行多行截断。
据我所知,问题是关于MX组件,使用Spark会是一个不错的选择,但只有在可能的情况下。
因此,如果“s:Label”不是一个选择,我认为最好的方法是扩展MX Label组件并将其textField的多行属性设置为true。应该这样做,我首先尝试在updateDisplayList方法的覆盖中添加该逻辑。
答案 4 :(得分:0)
我在这里有一篇关于这个主题的博客文章,无论你使用的是什么版本的Flex都能很好地运行:
http://www.tjdownes.com/post.cfm/easy-string-truncation-with-ellipsis-using-ternary-operators-in-as3
缺点是:
myString.slice(0,150).concat(myString.length&gt; 150?“...”:“”);
这会将字符串截断为150个字符,如果字符串长度超过150个字符,则会添加省略号。
答案 5 :(得分:0)
在flex 4上,您需要将Label#maxDisplayedLines
设置为高于0的值,它会为您剪裁。
请参阅this,了解如何自定义“...”
答案 6 :(得分:0)
spark component有trancion属性:@see。 http://blog.flexexamples.com/2009/06/15/determining-if-a-spark-simpletext-control-is-truncated-in-flex-4/