只是想知道是否有人知道那里的例子,或者我可以添加到我的应用程序中的类似VBox但有2列或更多列的类?
我正在从循环中向VBox添加项目,这样可以正常工作,但我希望将它分成两列:
_________________
| | |
| Item 1 | Item 2 |
| Item 3 | Item 4 |
| Item 5 | |
|________|________|
现在我只是并排设置2个VBox并将奇数项分配给一个,甚至分配给另一个,但让控件自动执行此操作会很好。
修改
请停止让我解决问题。我已经完成了功能性工作。但是如果你已经写了一个这样做的课程,或者知道我在哪里可以找到一个,我会非常感激。
感谢
答案 0 :(得分:1)
flexlib(http://code.google.com/p/flexlib/)有一个可爱的FlowContainer容器控件,可以完全满足您的需求。
答案 1 :(得分:0)
把它们放在HBox中?
答案 2 :(得分:0)
你可以为每一行使用一个包含HBox的VBox,只需在每个HBox上填充两个项目,例如:
var vb:VBox;
var array_of_items:Array;
for(var i:int = 0; i< array_of_items.length; i + = 2)
{
var hb:Hbox = new HBox();
hb.addChild(array_of_items [I]);
hb.addChild(array_of_items第[i + 1]);
vb.addChild(HB);
}
答案 3 :(得分:0)
我用HBox和2种形式做了类似的事情,这很好地排列了一些东西。 动态地,您可以替换为每个表单添加子项。
答案 4 :(得分:0)
为什么不直接使用Tile Container,并将direction属性设置为所需的流向?
答案 5 :(得分:0)
我自己也遇到过类似的问题。这就是我最终使用的:
package {
import mx.containers.HBox;
import mx.containers.VBox;
import mx.events.FlexEvent;
public class MultiColumnVBox extends HBox {
// public properties
public var columnWidth:int;
public var verticalGap:int;
public var adjustForScrollbar:Boolean;
public function MultiColumnVBox() {
super();
this.addEventListener(FlexEvent.CREATION_COMPLETE, rearrangeChildren);
}
private function rearrangeChildren(evtObj:FlexEvent):void {
// height will change whilst rearranging children, as will the Children Array
// we store them once at the start
var myHeight:int = this.height;
var children:Array = this.getChildren();
var lastIndex:int = 0;
var vBoxIndex:int = 0;
var vBox:VBox;
var totalHeight:int = -this.verticalGap + (this.adjustForScrollbar ? 16 : 0);
for(var i:int=0; i<children.length; i++) {
// resize each child and measure the height
// if you don't want it resized to the columnWidth, set the maxWidth property
children[i].width = this.columnWidth;
children[i].validateSize();
totalHeight += children[i].measuredHeight + this.verticalGap;
// if we're too tall, or we've reached the last element, move them into a VBox
if(totalHeight > myHeight || i == children.length-1) {
vBox = new VBox();
vBox.setStyle("verticalGap", this.verticalGap);
vBox.width = this.columnWidth;
// include last child if there is room
for(var j:int=lastIndex; j<(totalHeight > myHeight ? i : i+1); j++) {
vBox.addChild(children[j]);
}
this.addChildAt(vBox, vBoxIndex);
vBoxIndex += 1;
lastIndex = i;
totalHeight = -this.verticalGap + (this.adjustForScrollbar ? 16 : 0);
}
}
}
}
}
然而,最终结果略有不同。它不是将子项移动到交替列,而是无限期地填充第一列的高度,然后填充第二列,然后是第三列等。
如果您打算制作我们的课程,正如您所说,类似的方法应该有效:等待CREATION_COMPLETE事件,然后将子项重新排列为两个VBox控件。
答案 6 :(得分:0)
我认为方向=“水平”的Tile容器会这样做