如何在flex中截断带省略号(...)的文本?

时间:2010-11-29 12:48:53

标签: flex actionscript-3 air

在我的flex应用程序中,我有一个<mx:Text>控件,其高度和宽度足以显示两行。现在,如果文本太长而无法以两行显示,我希望将其截断并显示省略号(...)。带有省略号的默认截断似乎与标签一起出现,但标签不能以两行显示文本。

如何在flex <mx:Text>控件中模仿此行为?在此先感谢!!!

7 个答案:

答案 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)