2011-05-01 27 views
0

我在mxml中有一个Text元素。文本值正在由用户操作改变。我想将宽度设置为文本的确切大小。由于宽度属性是实际组件的宽度,我需要的measuredWidth属性触发FlexEvent.UPDATE_COMPLETE事件之后:以适当的宽度在第一时间更改文本的文本并在Flex中获取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值?

感谢

+0

只是好奇你为什么需要这个属性?也许你正试图解决一些可以通过其他方式解决的问题? – Constantiner 2011-05-01 19:01:28

+0

我真正需要的是将文本元素大小应用到内容文本的大小,所以它始终是相同的宽度。有更好的做法吗? – itarato 2011-05-01 19:17:20

+0

我是否对,您需要使用“文本”控件来更改高度以适合所有文本? – Constantiner 2011-05-01 19:21:34

回答

1

将文本元素更改为标签可解决问题。

0

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

+0

我知道,但正如我所说,它的工作原理是如果measuredWidth是一个比以前更小的值。对我而言,它只能在第一组中正确设置。从那以后它不可靠。 – itarato 2011-05-02 07:32:24