我想根据按钮中包含的文本来计算它的宽度,但当我尝试在Google上搜索如何计算文字的宽度时,我感到非常困惑。请问有人能帮我简化一下编写这样一个函数的过程吗:
public function HowWideWouldThisTextBeIfItWereInThisButton(Text:String,Container:Button):int {
...
}
提前感谢。
我想根据按钮中包含的文本来计算它的宽度,但当我尝试在Google上搜索如何计算文字的宽度时,我感到非常困惑。请问有人能帮我简化一下编写这样一个函数的过程吗:
public function HowWideWouldThisTextBeIfItWereInThisButton(Text:String,Container:Button):int {
...
}
提前感谢。
只要你在 UIComponent 中,你就可以使用 measureText 函数。
public function howWideWouldThisTextBeIfItWereInThisButton(text:String,container:Button):int {
var lineMetrics:TextLineMetrics = container.measureText(text);
return lineMetrics.width;
}
话虽如此,如果您没有在flex按钮组件上设置宽度,它应该会自动调整为文本的宽度。这样,如果您需要文本宽度,只需使用textWidth属性即可。
TextField
一起使用,您可以删除 text
并改用 getLineMetrics
,如 Adobe 文档中的一个示例所示。我将添加另一个答案来说明这一点。 - cregox这适用于任何格式、大小和字体类型。不要忘记使用属性 "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
var textMetrics:TextLineMetrics = label.measureText( label.text );
var textWidth:int = textMetrics.width;
这里还有一种可行的方法:
var tempText:Text = new Text();
tempText.regenerateStyleCache(false);
var textWidth:int = tempText.measureText(*yourstring*).width;
textField.textWidth
的构造方法很好用...直到你改变字体大小。
它似乎是基于12像素字体计算宽度的。
因此,如果你有嵌入字体和全局样式,可以尝试快速解决方案:var realWidth = myLabel.textField.textWidth * (fontSize / 12);
在 quoo 的回答中跟进 我的评论,这里是同样目的的代码,但只是从 TextField
中获取宽度,并使用 TextLineMetrics:
public function mtxtWidth(container:TextField):int {
var lineMetrics:TextLineMetrics = container.getLineMetrics(0);
return lineMetrics.width;
}
Joshua,清晰明确地表达真的很有帮助。你是在说TextField、MX Label、Spark Label、RichText等吗?不同的文本组件使用不同的文本引擎,如FTE和TLF可能有不同的解决方案。我当然希望Adobe有一套好的工具或示例代码,可以预测控件上呈现的字体大小,在实际操作前就可以得知。但是好消息是,在某些情况下 - 比如,一个老式的TextField,你可以相当准确地预测它。你只需要创建一个TextField,设置它的textFormat字段、auto size方法和文本。在添加到任何地方之前,您应该能够获得它的大小。我不记得顺序是什么了,但是我记得设置这些属性的顺序很重要。如果您无法弄清楚如何做到这一点,我可以提供一个代码示例。现在,对于像Spark Labels这样的新型“改进”组件 - 如果我找不到该死的方法......已经花了好几个小时了,还没有找到方法......或者知道方法的人 :P。