Frage

Nur frage mich, ob jemand ein Beispiel gibt, weiß oder Klasse ich zu meiner App hinzufügen können, wie ein VBox durchführen würde, aber mit zwei oder mehr Spalten?

Ich bin das Hinzufügen von Elementen zu einem VBox aus einer Schleife, und das funktioniert gut, aber ich möchte, um es in zwei Spalten aufgeteilt:

 _________________
|        |        |
| Item 1 | Item 2 |
| Item 3 | Item 4 |
| Item 5 |        |
|________|________|

Für jetzt werde ich nur 2 VBoxes Seite setzen sie und assign ungeradee Elemente ein, und auch an den anderen, aber es wäre schön, eine Kontrolle zu haben tut dies automatisch.

Bearbeiten
Bitte beenden Sie mich Arounds arbeiten zu geben. Ich habe bereits eine funktionelle Arbeit um. Aber wenn Sie bereits eine Klasse geschrieben haben, dass dies der Fall ist, oder wissen, wo ich eine online finden können würde ich es wirklich schätzen. Dank

War es hilfreich?

Lösung

flexlib ( http://code.google.com/p/flexlib/ ) hat einen schönen Containersteuer FlowContainer, die genau das tun, was Sie brauchen.

Andere Tipps

legte sie in einer HBox?

Sie könnten eine VBox verwenden, um eine HBox für jede Zeile enthält und einfach jede HBox mit 2 Einträgen füllen, so etwas wie:

var vb: VBox;
var array_of_items: Array;

(var i: int = 0; i {
  var hb: HBox = new HBox ();
  hb.addChild (array_of_items [i]);
  hb.addChild (array_of_items [i + 1]);
  vb.addChild (hb);
}

Ich habe etwas Ähnliches wie dies mit einer HBox und 2 bildet, welche Linien die Dinge auf den Punkt. Dynamisch, könnten Sie Kinder auf jede Form wechseln hinzuzufügen.

Warum nicht einfach die Tile-Container verwenden, und stellen Sie die Richtung Eigenschaft auf Ihre gewünschte Strömungsrichtung?

Ich hatte ein ähnliches Problem selbst. Dies ist, was ich am Ende mit:

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);
                }
            }
        }
    }
}

Das Endergebnis ist etwas anders, aber. Statt Kinder zu abwechselnden Spalten bewegen, füllt es die Höhe der ersten Spalte, dann die zweite, dann die dritte usw. auf unbestimmte Zeit.

Wenn Sie machen Ihre unserer Klasse planen, wie Sie gesagt haben, ein ähnlicher Ansatz funktionieren sollte. Warten auf die CREATION_COMPLETE Ereignis und Neuanordnung dann die Kinder in zwei VBox Kontrollen

ich glaube, Tile-Container mit direction = "horizontal" wird es tun

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top