更改文本的文本并在Flex中获取measuredWidth

时间:2011-05-01 18:57:47

标签: flash flex

我在mxml中有一个Text元素。文本值正在根据用户操作进行更改。我想将宽度设置为文本的确切大小。由于width属性是实际组件的宽度,因此在触发FlexEvent.UPDATE_COMPLETE事件后我需要measuredWidth属性:

textField.addEventListener(FlexEvent.UPDATE_COMPLETE, function(e:FlexEvent):void{
    textField.width = textfield.measuredWidth;
});

这仅在第一次更改为适当的宽度。之后它只能更小但不会更大。我已经阅读了Text和UIComponent源代码,它说我需要调用invalidateSize()。但它只有在我设置explicitWidth属性NaN时才有效。所以我做了一个setter函数:

function setText(newValue:String):void {
  textField.text = newValue;
  textField.explicitWidth = NaN;
  textField.invalidateSize();
}

但它仍在缩小。我的问题是,如何在UPDATE_COMPLETE事件之后始终获得正确的measuredWidth值?

由于

2 个答案:

答案 0 :(得分:1)

将Text元素更改为Label可解决问题。

答案 1 :(得分:0)

我同意一些评论者的观点,认为可能有更好的替代品可以达到相同的效果。但是,您可以使用Text元素的measureText函数来确定必要的宽度: