Domanda

Chiedo solo se qualcuno sa di un esempio là fuori o una classe posso aggiungere al mio app che avrebbe eseguito come un VBox ma con 2 o più colonne?

io sono l'aggiunta di elementi a un VBox da un ciclo, e che funziona bene, ma voglio avere è suddivisa in due colonne:

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

Per ora mi sto solo andando a impostare 2 vbox fianco a fianco e oggetti strani assegnare ad uno, e anche per l'altro, ma sarebbe bello avere un controllo farlo automaticamente.

Modifica
Si prega di smettere avermi dato lavoro around. Ho già un lavoro funzionale in giro. Ma se avete già scritto una classe che fa questo, o sapere dove posso trovare uno in linea che realmente lo apprezzerei. Grazie

È stato utile?

Soluzione

flexlib ( http://code.google.com/p/flexlib/ ) ha un bel controllo contenitore FlowContainer che farà esattamente quello che ti serve.

Altri suggerimenti

metterli in un HBox?

Si potrebbe usare un VBox contenente un HBox per ogni riga e semplicemente compilare ogni HBox con 2 elementi, qualcosa come:

var vb: VBox;
var array_of_items: Array;

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

Ho fatto qualcosa di simile a questo con un HBox e 2 forme, quali linee le cose bene. Dinamicamente, si potrebbe alternare l'aggiunta di figli a ogni modulo.

Perché non usare il Tile Container, e impostare la proprietà direzione verso la direzione di flusso richiesto?

ho avuto io stesso un problema simile. Questo è quello che ho finito per usare:

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

Il risultato finale è leggermente differente, tuttavia. Invece di spostare i bambini a colonne alternate, riempie l'altezza della prima colonna, poi la seconda, la terza, ecc indefinitamente.

Se si ha intenzione di rendere il vostro nostra classe, come hai detto, un approccio simile dovrebbe funzionare:. Attesa per l'evento CREATION_COMPLETE, e quindi riorganizzare i bambini in due controlli VBox

Credo che il contenitore delle mattonelle con la direzione = "orizzontale" lo farà

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top