Я заполняю dropDownList с помощью arrayCollection строк. Я хочу, чтобы ширина элемента управления выпадающего списка соответствовала размеру (в пикселях) самой длинной строки в коллекции массивов. Проблема, с которой я столкнулся, - это: ширина шрифта строк в коллекции различна, например. «W» выглядит шире, чем «l». Поэтому я оценил ширину символа как 8 пикселей, но это не очень удобно. Если встречается строка с множеством «W» и «M», оценка неверна. Поэтому я хочу точную ширину пикселов строк. Как я могу получить точную длину строки в пикселях?Длина строки в пикселях
Мое решение, которое оценивает все персонажу будет 8 пикселей в ширину, приводится ниже:
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);
}
Любая идея или решение высоко ценится.
Благодаря
@Rose Поверьте, вам нужно добавить validateNow() вызов после присвоения строки, но перед проверкой textWidth/textHeight назначение строки приводит к недействительности размера, но пересчету от размера не является синхронным, поэтому вы должны принудительно выполнить валидацию – shaunhusain
Отлично! Мне понравилось решение; У меня есть небольшая проблема. Он не получает правильную ширину пикселя. Я дал ему эту строку в массиве. var strings: Array = ["a", "giraffe", "foo", "объект ArrayCollection не представляет никакого"]; Теперь он получил ширину текста 245, но на самом деле размер был 276. Таким образом, полоса прокрутки отображается в моем выпадающем списке.Из вашего кода я удалил часть, которая имеет textFormat, поэтому я сделал функцию measureStr функцией 1 аргумента – Rose
@Rose: TextFormat влияет на шрифт (-face и -family), который используется при измерении текста - он должен быть изменен в точности совпадать с раскрывающимся списком (хотя я не уверен, что это такое). После удаления материала textFormat он дает правильную длину? Если это так, я подозреваю, что это потому, что текстовый формат по умолчанию совпадает с тем, что используется в раскрывающемся списке. – Cameron