火花标签宽度

我需要设置一个火花标签的文本,然后这种标签贴在根据其宽度x轴的位置。 不幸的是,似乎标签的宽度不马上更新并因此定位将失败。 我可以听updateComplete标签上的事件,然后更新它的位置,但是这意味着更多的时候比我想的重新定位标签很多(updateComplete更多的时候触发了大量的比对不断变化的宽度)。 如何妥善处理似乎什么是一件容易的事情任何想法?

这里有一个代码片断显示了上述我。 如果你按下按钮,你会看到3痕迹:标签宽度改变其文本,设置它的文本之后之前,当标签完成更新本身。 很想知道,如果有一种方式来获得正确的宽度,而不必听updateComplete事件......该按钮和VGroups都只是为了运行示例

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Script> <![CDATA[ import mx.events.FlexEvent; protected function button1_clickHandler(event:MouseEvent):void { trace("label width = ", lb.width); lb.addEventListener(FlexEvent.UPDATE_COMPLETE, lb_updateCompleteHandler); lb.text = "hello world!"; trace("label width post change= ", lb.width); } protected function lb_updateCompleteHandler(event:FlexEvent):void { lb.removeEventListener(FlexEvent.UPDATE_COMPLETE, lb_updateCompleteHandler); trace("label width post update complete = ", lb.width); } ]]> </fx:Script> <s:VGroup> <s:Button label="go" click="button1_clickHandler(event)"/> <s:Label id="lb" text="h" x="10" y="10" /> </s:VGroup> </s:Application>

--------------解决方案-------------

下面为我​​工作。 简单而有效。

var l:Label = new Label();
l.text = "That'll do";
var tlm:TextLineMetrics = l.measureText( l.text);
Alert.show( tlm.width + " is what you are looking for");

VGroup是一Group具有VerticalLayout 。 它不允许有定制的定位内组( xy )。 有这个可能性,利用Group与(默认) BasicLayout

如果您使用使用callLater(),你可以“捕捉”在当前范围内的变量,但也有它执行的变更后width已被传播。 例如:

callLater(function():void
{
trace("label width in callLater = ", lb.width);
});

更新:我想我应该更详细一点要明确我的意思是“捕获”的价值观。 这可以用下面的简单的例子来完成:

callLater(function(prevWidth:Number):void
{
trace("previous label width in callLater = ", prevWidth); // 8
trace("label width in callLater = ", lb.width); // 64
}, [lb.width]);

作为示例演示,您在通过参数args阵列(,即[lb.width]变成prevWidth )取现值(即,它们通过值),而中,变量您进行直接的参照在函数实际上是在范围时功能被执行(即,闭合)。

你可以在事件监听器也做到这一点,但与使用callLater()这是一个有点简单。

看起来喜欢听的resize事件的伎俩,是不是很一般为updateComplete事件,所以我打电话的“正确答案”。 可能有更好的方法来做到这一点,当你试图由于性能优化的手来定位的东西,虽然我不知道它是什么呢。

您可以设置文本之后调用lb.validateNow(),这样你会得到新的宽度的时候了。 不过建议你阅读有关组件的生命周期不会有这样琐碎的问题。

是的,因为人们已指出,没有重新定位将与这样的布置工作。

分类:柔性 时间:2015-03-15 人气:2
本文关键词: 柔性
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.483 (s). 10 q(s)