我创建了一个扩展UIComponent的AS3类,以便我可以轻松地将它添加到我的MXML布局中。它工作正常,但我想弄清楚如何动态更新UIComponent宽度和高度。我希望我的超级UIComponent在内容周围绘制边框,因此我需要获取特定的“内容”维度才能执行此操作。
我理解UIComponent的想法是你应该专门设置宽度和高度...但我只是扩展它,以便我能够轻松地使用我的自定义组件与MXML。
有没有一种方法可以获得UIComponents'内容'的宽度和高度?
由于
答案 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()
方法。然后它会遍历所有子项,计算它们的大小,并将它们总结为measuredWidth
和measuredHeight
。然后将父母的大小设置为这些值。
如果你扩展UIComponent,你必须在measure
方法中做很多事情来处理所有边缘情况:显式,百分比,约束(顶部,左边......),填充,是否includeInLayout =是的,等等。帆布做到了这一切。与其他容器组件相同:Box,HBox,VBox,List等。
希望有所帮助, 兰斯