Länge eines Strings in Pixel
Ich bin das Auffüllen einer dropDownList mit arrayCollection von strings. Ich möchte die Breite der Dropdown-Liste-Steuerelement in übereinstimmung mit der Größe (in Pixel) des längsten Strings im array Sammlung. Das problem, das ich bin vor ist: die schriftart, die Breite des strings in der Sammlung sind verschiedene, z.B. " W " sieht breiter als 'l'. So habe ich geschätzt, dass die Breite eines Zeichens von 8 Pixel, aber das ist nicht das, Recht ordentlich. Wenn Sie eine Zeichenfolge, die hat viele 'W' und 'M' hat die Schätzung falsch ist. Also ich möchte die genaue Pixelbreite des strings. Wie bekomme ich die exakte Länge eines Strings in Pixel??
Meine Lösung, die Schätzungen alle Zeichen werden 8 Pixel breit ist unten angegeben:
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);
}
Jede Idee oder Lösung sehr geschätzt.
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erhalten Sie eine genauere Messung, können Sie füllen Sie ein Textfeld mit dem string, dann Messen Sie die Breite des TextField text.
Code:
Verwendung:
FontFormat
als gut, und es ergibt die gleiche Breite wie Times New Roman, Schriftgröße 12 -- also ich vermute dies ist der Standard für Textfelder (aber wie du sagst, der dropDownList könnte anders sein). In jedem Fall, das wird nur erhalten Sie die Größe des Textes (ohne Rand) - ich denke, es ist wahrscheinlich, dass Sie müssen hinzufügen, ein bisschen zu kompensieren und die Margen in der dropDownListHabe ich nicht Bearbeiten priv auf anderer Leute post also ich bin dieses posting, als eine separate Antwort, aber Kredit gehen sollten, um Cameron, ob das funktioniert:
Wenn ich sehe, dass es funktioniert und seine bearbeitet wird, würde ich diesen hier löschen für Sauberkeit.
Sorry für den Müll, die post war zunächst versuchen, die Frage zu beantworten, habe gerade so falsch... jedenfalls getestet und es scheint zu funktionieren. Ich Tat dies in Flex aber Sie sollten in der Lage sein, nur die AS3-Teil kein problem, das ich gerade eingepackt die textfield-Objekt in eine UIComponent, um es auf die Bühne, sondern die autosize-scheint gut zu funktionieren:
autoSize
es zu tun und nicht die Tatsache, dass die textbox Hinzugefügt wird, auf die Bühne?Dies ist eine mehr Polierte version einige der oben genannten code. Rechnungswesen für Zeilenumbrüche (html break und \n) und der Annullierung des Textfield-Objekt erstellt, mit einigen anderen Optimierungen. Hoffe, das ist hilfreich.
Wenn Sie es vorziehen diese in eine Klasse, check it out in meinem GIT-framework:
https://github.com/charlesclements/as3-tools/blob/master/net/charlesclements/util/text/TextUtil.as
AS3-tools:https://github.com/charlesclements/as3-tools
Auch unser Flash/JS Bruder Jack Doyle @ GreenSock hat einige praktische Dinge zu tun, die Manipulation von text. Es lohnt sich, check it out:http://www.greensock.com/splittext/