2012-04-17 182 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