更新UIComponent大小

时间:2010-02-23 11:39:05

标签: flex actionscript-3 flex3 mxml

我创建了一个扩展UIComponent的AS3类,以便我可以轻松地将它添加到我的MXML布局中。它工作正常,但我想弄清楚如何动态更新UIComponent宽度和高度。我希望我的超级UIComponent在内容周围绘制边框,因此我需要获取特定的“内容”维度才能执行此操作。

我理解UIComponent的想法是你应该专门设置宽度和高度...但我只是扩展它,以便我能够轻松地使用我的自定义组件与MXML。

有没有一种方法可以获得UIComponents'内容'的宽度和高度?

由于

2 个答案:

答案 0 :(得分:1)

不确定UIComponent的“内容”是什么意思。你的意思是UIComponent的尺寸,还是子容器的?

您可以在其updateDisplayList方法中查找任何组件大小的一个位置,这是一个您必须覆盖的受保护方法,如下所示:

override protected function updateDisplayList(width:Number, height:Number) {
  super.updateDisplaylist(width, height);
  // your statements here
}

您说您只是在扩展UIComponent,以便您可以轻松地使用自定义组件“与MXML一起使用”。但是你仍然需要尽可能多地扩展它以便做你需要做的事情。为此,您应该了解组件的生命周期,何时覆盖createChildren(),commitProperties(),measure()和其他方法,等等。这真的不难,你已经迈出了第一步。祝你好运!

答案 1 :(得分:1)

就像Robusto在他的评论中所描述的那样,如果你想给孩子添加孩子,Canvas可能是更好的选择。 Canvas实例化CanvasLayout,它处理所有复杂的逻辑,用于调整自身和子项的大小。

UIComponent内容的宽度和高度measure()方法中确定,除非 UIComponent已定义显式或百分比大小。测量是没有详细记录的方法之一。我建议使用EffectiveUI Diving Deep into the Flex Component Lifecycle。他们进入生命周期方法并真正解释如何使用它们。

如果父(您的组件)没有定义任何大小,则调用measure()方法。然后它会遍历所有子项,计算它们的大小,并将它们总结为measuredWidthmeasuredHeight。然后将父母的大小设置为这些值。

如果你扩展UIComponent,你必须在measure方法中做很多事情来处理所有边缘情况:显式,百分比,约束(顶部,左边......),填充,是否includeInLayout =是的,等等。帆布做到了这一切。与其他容器组件相同:Box,HBox,VBox,List等。

希望有所帮助, 兰斯