Sto popolando un dropDownList con arrayCollection di stringhe. Voglio che la larghezza del controllo elenco a discesa corrisponda alla dimensione (in pixel) della stringa più lunga nella raccolta di array. Il problema che sto affrontando è: la larghezza del carattere delle stringhe nella collezione è diversa, ad es. 'W' sembra più largo di 'l'. Quindi ho stimato che la larghezza di un personaggio sia di 8 pixel, ma non è molto carina. Se si incontra una stringa con molti "W" e "M", la stima è errata. Quindi voglio una larghezza di pixel precisa delle stringhe. Come posso ottenere la lunghezza esatta di una stringa in pixel ??Lunghezza di una stringa in pixel
La mia soluzione che stima tutto il carattere per essere di 8 pixel di larghezza è il seguente:
public function populateDropDownList():void{
var array:Array = new Array("o","two","three four five six seven eight wwww");
var sampleArrayCollection:ArrayCollection = new ArrayCollection(array);
var customDropDownList:DropDownList = new DropDownList();
customDropDownList.dataProvider=sampleArrayCollection;
customDropDownList.prompt="Select ...";
customDropDownList.labelField="Answer Options:";
//calculating the max width
var componentWidth=10; //default
for each(var answerText in array){
Alert.show("Txt size: "+ answerText.length + " pixels: " + answerText.length*9);
if(answerText.length * 8 > componentWidth){
componentWidth=answerText.length * 8;
}
}
customDropDownList.width=componentWidth;
answers.addChild(customDropDownList);
}
Qualsiasi idea o la soluzione è molto apprezzato.
Grazie
@Rose Credere che è necessario aggiungere una chiamata validateNow() dopo aver assegnato la stringa ma prima di controllare il testoWidth/textHeight l'assegnazione della stringa causa l'invalidazione della dimensione ma il ricalcolo della dimensione non è sincrono quindi devi forzare la validazione – shaunhusain
Grande! Mi è piaciuta la soluzione; ho un piccolo problema però Non sta ottenendo la giusta larghezza di pixel. Gli ho dato questa stringa nell'array. var stringhe: Array = ["a", "giraffe", "foo", "L'oggetto ArrayCollection non rappresenta alcun"]; Ora la larghezza di testo era 245 ma in realtà la dimensione era 276. Quindi una barra di scorrimento viene visualizzata nell'elenco a discesa.Dal tuo codice ho rimosso la parte che ha textFormat, quindi ho reso la funzione measureStr una funzione a 1 argomento – Rose
@Rose: Il TextFormat influisce sul carattere (-face e -family) che viene utilizzato quando si misura il testo - dovrebbe essere cambiato per abbinare esattamente quello dell'elenco a discesa (anche se non sono sicuro di cosa sia). Dopo aver rimosso la proprietà textFormat, indica la lunghezza giusta? Se è così, ho il sospetto che sia perché il formato di testo predefinito è lo stesso di quello che viene utilizzato nell'elenco a discesa. – Cameron