2012-04-17 85 views
0

我有一个文本字段,它动态调整其宽度以适合屏幕。如果文本不适合,我希望文本被截断并附加'...'。但是,如何知道文本值是否比可用文本字段宽度长?AS3文本字段,截断

回答

2

yourTextField.textWidth为您提供了TextField文本的长度。 只要确保首先设置TextField的autosize属性,即可真正获取文本的宽度,而不是TextField的宽度。

1

可能唯一的方法就是如果textWidth比宽度更长,可以逐个字母地逐个添加或删除一个字母并添加省略号并检查宽度直到它接近填充整个文本字段。

+0

如果我通过说100个文本字段的列表循环这可能会添加一些严重的开销?嗯, – woodscreative 2012-04-17 16:26:08

+0

是的,但你会怎么做?您可以设置最小和最大字符数,以便如果您在缓冲区之上或之下,它会启动,为您节省一些循环。 – Daniel 2012-04-17 18:38:13

1

好吧,经过一些脑力劳动后,我想如何将字符串留在textField中进行裁剪,然后在新的MC中添加一个额外的“...”,并将其可见性设置为false。当textField.textWidth> = textField.width时,它使“...”MC可见并将其放置在textField的末尾。这可能在textField的内部或外部。

2

我需要这个完全一样的功能,我所做的就是每当resize事件被触发,导致了TextField目标需要被调整我进行一个小环如下:

tfMessage.text = message; 

if(tfMessage.width > maximumWidth) 
{ 
    tfMessage.appendText("..."); 

    while(tfMessage.width > maximumWidth) 
    { 
     tfMessage.text = tfMessage.text.substr(0, -4) + "..."; 
    } 
} 

确保TextField对象的autoSize属性设置为TextFieldAutoSize.LEFT以使对象在您更新文本时自动调整大小。您可以使用TextFieldAutoSize枚举中的其他值,但LEFT最适合我。使用示例:

tfMessage.autoSize = TextFieldAutoSize.LEFT; 

看起来似乎过度杀伤力,但它是您最好的,最干净的选项。此外,我使用它来调整数百个TextField对象的大小,并且在普通计算机上没有性能下降。给Flash一些功劳哈哈,他们已经做好AVM2的调整和优化。

无论如何,我希望这可以帮助,完美的作品。祝你的项目好运。

+0

这相当多余 – mika 2013-02-27 00:20:04

+0

这是去年四月,因为我觉得自那时起我已经有所改善。荣誉答案,但绝对是最好的解决方案! – xLite 2013-02-27 00:59:06

9

嘿怎么样去简单:-)

while (textfield.numLines > MAX) 
    textfield.text = textfield.text.slice(0, -4) + "..."; 

享受!

+0

OP询问截断宽度,而不是高度... – 2015-04-05 14:48:42

+0

然后,OP可以将MAX设置为1 – mika 2015-04-06 01:03:26

+0

根据循环中没有宽度检查,根本不会截断文本。除非你的意思是在运行循环之前将wordWrap/multiline设置为true ...是的,那样它就可以工作了:-) – 2015-04-08 13:36:33