在ActionScript和Flex中计算文本宽度

时间:2010-05-26 21:20:47

标签: flex flash actionscript-3 air

我正在尝试根据它将包含的文本计算WIDE如何制作我的按钮,当我尝试谷歌如何计算像某些文字的宽度一样简单的东西时,我会睁大眼睛只是试图通过明显无意义的深奥反直觉伏都教。那里的任何人都可以帮我简化我如何编写这样的函数:

public function HowWideWouldThisTextBeIfItWereInThisButton(Text:String,Container:Button):int {
 ...
}

提前致谢。

8 个答案:

答案 0 :(得分:21)

只要您在UIComponent中,就可以使用measureText函数。

public function howWideWouldThisTextBeIfItWereInThisButton(text:String,container:Button):int {
   var lineMetrics:TextLineMetrics = container.measureText(text);
   return lineMetrics.width;      
}

话虽这么说,如果你没有设置宽度,flex按钮组件应自动调整大小到文本的宽度。这样,如果你需要文本宽度,你可以调用textWidth属性。

答案 1 :(得分:9)

这适用于任何格式,大小,字体类型。不要忘记属性“autoSize”和“wordWrap”!

var tf:TextField = new TextField();
addChild(tf);
tf.autoSize = TextFieldAutoSize.LEFT;
tf.wordWrap = false;
tf.text = "Whatever here";
tf.width = tf.textWidth + 4; // add 2 pixels-gutters left & right

您的按钮需要“tf.width”宽......

答案 2 :(得分:2)

Here's你是如何在Spark中做到的:

我已修改 - 简化 - 他的例子在这里:

var textMetrics:TextLineMetrics = label.measureText( label.text );  
var textWidth:int = textMetrics.width; 

答案 3 :(得分:1)

这是一种有效的方式:

var tempText:Text = new Text();
tempText.regenerateStyleCache(false);
var textWidth:int = tempText.measureText(*yourstring*).width;

答案 4 :(得分:1)

我认为,textField.textWidth构造工作正常......直到你改变字体大小。 它似乎根据12px字体计算宽度。 因此,如果您有嵌入字体和全局样式,您可以尝试快速解决方案:

var realWidth = myLabel.textField.textWidth * (fontSize / 12);

我在长短串上尝试了这个,结果是正确的。

答案 5 :(得分:0)

约书亚,清楚真的很有帮助。你在说TextField,MX Label,Spark Label,RichText等吗?不同的文本组件使用不同的文本引擎,例如FTE和TLF,并且可能具有不同的解决方案。我当然希望Adobe有一套很好的实用程序或示例代码,可以在实际执行之前预测渲染到控件上的字体大小。但是,好消息是,在某些情况下 - 比如,一个好的老式TextField,你可以很好地预测这一点。您只需创建一个TextField,设置它的textFormat字段,自动大小方法和文本。在将其添加到任何地方之前,您应该能够获得它的大小。我不记得订单是什么,但是,我记得你设置这些属性的顺序很重要。如果你无法弄清楚如何做,我可以提供一个代码示例。现在,对于新的,“改进的”组件,如Spark标签 - 如果我能找到一个该死的方式,我会被惹恼......花了好几个小时就没有办法......或者是某个人知道一种方式:P。

答案 6 :(得分:0)

quoo 的回答中跟进我的评论,这里的代码是出于同样的目的,但只是抓住TextField的宽度,使用{ {3}}:

    public function mtxtWidth(container:TextField):int {
       var lineMetrics:TextLineMetrics = container.getLineMetrics(0);
       return lineMetrics.width;      
    }

答案 7 :(得分:-1)

听起来你可以使用textWidth