따뜻한 대한민국 겨울만들기




Spark Component를 사용할 때, 가장 불편한것 중 하나가
Label의 Text Width를 알 수가 없는 것이다. (어딘가 방법은 있지 않을까.. 생각한다...흠)

기존의 mx Component의 Label은 label.textWidth란 속성을,
Textfield는 textField.textWidth 를 하면 쉽게 Text의 글자 width를 알 수 있었다.

하지만, SparkLabel에는 textWidth를 가져오는 속성은 없고,
Label에 text가 업데이트가 되는 시점 이후에나 Label의 width를 알 수 있었다...
(그 전까지는 Label의 width는 0으로 찍힌다...createChildren이 된 이후에도...;; )


Label의 Text Width를 알 수 있는 방법이 2가지가 있는데,


1. Label.measureText()를 이용하는 방법 (참고 URL에서 알게 된 방법)

var label:Label = new Label();
label.regenerateStyleCache( false );
var textMetrics:TextLineMetrics = label.measureText( name );
var textWidth:int = textMetrics.width;

2. FlexEvent.UPDATE_COMPLETE 의 리스너를 걸어 text가 업데이트 되고 난 뒤에 관련 작업을 하는 것이다.

label.addEventListener(FlexEvent.UPDATE_COMPLETE, updateCompleteHandler);

private function updateCompleteHandler(event:FlexEvent):void{
    trace(label.width);
}

이렇게 해서 Label의 text width를 알 수 있었다.

위의 1번 방법은 Label에 style을 먹였을때는, 정상적으로 width값이 아닌, style이 먹지 않은 width 값이 나왔다. (이유는 좀 더 확인을 해봐야 할 것 같다.)
그래서 현재는 위 2번 방법을 사용하고 있다.

혹시 이 방법 보다 좋은 방법이 있다면, 답글 부탁드립니다. __

※ 참고
http://workflowflash.com/12424/tip-calculate-properties-such-as-position-and-measurements-for-flex-spark-label-component-2.php