Domanda

Quando si aggiunge un componente ComboBox in una Sprite, l'altezza del contenitore è più grande di quanto dovrebbe.

Ecco cosa voglio dire:

import fl.controls.ComboBox;
//add combo box inside a container sprite
var combo:ComboBox = new ComboBox();
var container:Sprite = new Sprite();
addChild(container);
container.addChild(combo);
//draw the outline of the container sprite
container.graphics.lineStyle(1,0x009900);
container.graphics.drawRect(0,0,container.width,container.height);
//I don't get this:
trace(combo.height);//outputs 22
trace(container.height);//outputs 101

Nota: sarà necessario il componente ComboBox nella Libreria. Sto usando Flash CS3 per questo.

Se io invalidate / ridisegnare, in questo modo:

combo.invalidate(InvalidationType.ALL,true);
combo.drawNow();

le variazioni in altezza da 101 a 104.

Tutte le soluzioni?

UPDATE: Ho sovrascritte il metodo configUI in una sottoclasse ComboBox, ma le misure sono corrette per tutto il tempo. Perché il cambiamento altezza del contenitore a 100?

È stato utile?

Soluzione

Questo è causa di Adobe sciocco impianto di componenti Flash, se si guarda nel 2 ° fotogramma di un componente all'interno di un IDEA Flash si può vedere che è avatar temporanea che restituisce la dimensione iniziale.

entrare descrizione dell'immagine qui

per risolvere questo si dovrebbe iterare i figli avatar e normalizzare le loro dimensioni:

public static function normalizedComponent(component:Sprite):void {
    for (var i:int = 0; i < component.numChildren; i++) {
        component.getChildAt(i).height = component.height;
        component.getChildAt(i).width = component.width;
    }
}

utilizzo:

var comboBox:ComboBox = new ComboBox();
normalizedComponent(comboBox);
normalizedComponent(comboBox.textField);

Altri suggerimenti

"se è aperto, quindi l'altezza con l'casella a discesa"

Hmm, penso che quando la lista si aggiunge alla DisplayList sotto il pulsante relativo realmente aggiunto ha un popup. Così l'altezza dovrebbe rimanere all'altezza tasto, dal momento che lo sprite sarà mai effettivamente contenere l'elenco a discesa.

Una possibile ragione per l'Altezza contenitore potrebbe essere sbagliato prima che passa attraverso qualsiasi invalidazione potrebbe essere dovuto ai figli in esso contenuti. Forse la pelle combobox (potrebbe essere un movieClip di 102px di altezza) oppure un sotto-componente ComboBox che iniziano sempre a 102px di altezza o ad altezza strano (TextField in un pulsante è conosciuto per essere un momento sbagliato).

Una soluzione semplice sarebbe quella di aspettare fino a quando un creationComplete / evento aggiunto e vedere che cosa è l'altezza finale, quindi disegnare il confine.

Non credo che questo un bug ComboBox esclusiva.

Dopo aver aggiunto un Button componente a un contenitore Sprite Inoltre ottengo risultati diversi quando si traccia il pulsante e le dimensioni del contenitore. In realtà, io ricevo gli stessi risultati 100 x 100.

Vorrei eliminare la discesa casella di possibilità, dal momento che la componente Button non ne ha uno.

Credo che la soluzione sarebbe lo stesso per gli oggetti 2 componenti (ComboBox e Button), ma non ho trovato appena ancora la soluzione. Aggiornerà quando lo faccio.

UPDATE:

sono stato solo in grado di ottenere questo lavoro utilizzando validateNow(), e pochi minuti dopo - ho trovato il seguente link: http://forums.adobe.com/message/816912?tstart=0

Essenzialmente, il collegamento ci insegna a mettere la chiamata validateNow() all'interno di un evento EnterFrame, o all'interno di un SetTimeout con temporizzazione corretta.

- immagino che l'altezza visualizzata di ComboBox è il reale altezza - id est, se viene aperto, quindi l'altezza con l'casella a discesa, se non poi, senza. Tuttavia - le voci sono ancora lì, anche se con il set .Visible per false , che si espande ancora il contenitore, anche se non si può vedere che ... Perciò - direi di fare:

container.graphics.drawRect(0, 0, combo.width, combo.height);

Questo è il modo di solito farlo pure ...

can si imposta manualmente prima di questo codice:

container.width=100;

container.height=100;

container.graphics.drawRect(0,0,container.width,container.height);

Ciao ho trovato da qualche parte una soluzione per un problema simile con NumericStepper.

e la soluzione era:

var tInput:TextInput = numericStepper.getChildAt(2) as TextInput;
tInput.textField.height = 22; 

Nel tuo caso provare quanto segue:

var tInput:TextInput = combo.getChildAt(1) as TextInput;
tInput.textField.height = 22; 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top