AS3中的TextFieldAutoSize和textWidth

时间:2011-02-10 23:33:51

标签: flash actionscript-3

我正在尝试在AS3中为文本字段绘制背景。

我有一个带嵌入字体的TextField并使用autoSize = TextFieldAutoSize.LEFT。我将文本分配给TextField然后调用try使用TextField的textWidth绘制一个roundedRect。文本字段宽度始终小于实际文本宽度。

还有其他方法可以获得实际的文本宽度吗?我做了一些谷歌快速搜索,但我没有找到任何东西。

代码:

var tfProgramName:TextField = TextUtil.createTextField(true,"Arial",20,true);
tfProgramName.width = 100;
tfProgramName.autoSize = TextFieldAutoSize.LEFT;
tfProgramName.x = 5;
tfProgramName.y = 5;
addChild(tfProgramName);

tfProgramName.text = _program.title;
background.graphics.clear();
background.graphics.beginFill(0xFF0000,0.75);
background.graphics.drawRoundRect(0,0,tfProgramName.textWidth+10,this.height+10,5,5);
background.graphics.endFill();
在我的情况下, textWidth类似于373,但它应该接近400.它绝对接近,但它似乎没有考虑到字体或字体大小。

3 个答案:

答案 0 :(得分:1)

我不能保证它会更好,但看看TextLineMetrics它提供的信息比其他任何东西都多,所以这可能是你最好的选择。

答案 1 :(得分:0)

你可以尝试做的是使用TextField的getCharBoundaries()或getCharIndexAtPoint()的返回值。 TextField的textWidth属性似乎总是​​偏离几个像素 - 它将返回一些宽度而不是文本的实际宽度。 LineMetrics也可以提供帮助,但我自己并没有使用它。

答案 2 :(得分:0)

TextField类不仅具有.width属性,还具有.textWidth,它将返回真正的TextWidth。为了获得TextField的起点,您还需要使用TextLineMetrics获得的起始位置,就像Tyler写道:

var lineMetrics : TextLineMetrics = textField.getLineMetrics(0);
var startX : Number = lineMetrics.x;

和宽度将是:

lineMetrics.width;

textField.textWidth;