Вычисление Ширины Текста В ActionScript И Flex

public function HowWideWouldThisTextBeIfItWereInThisButton(Text:String,Container:Button):int {
 ...
}

спасибо заранее.

8 ответов


пока вы находитесь в UIComponent, вы можете использовать measureText.

public function howWideWouldThisTextBeIfItWereInThisButton(text:String,container:Button):int {
   var lineMetrics:TextLineMetrics = container.measureText(text);
   return lineMetrics.width;      
}

при этом компонент кнопки flex должен автоматически иметь размер по ширине текста, если вы не установите ширину на нем. Таким образом, если вам нужна ширина текста, вы можете просто вызвать свойство textWidth.


это работает в любом формате, размере, типе шрифта. Не забудьте свойства "autoSize"и " wordWrap"!

var tf:TextField = new TextField();
addChild(tf);
tf.autoSize = TextFieldAutoSize.LEFT;
tf.wordWrap = false;
tf.text = "Whatever here";
tf.width = tf.textWidth + 4; // add 2 pixels-gutters left & right

ваша кнопка должна быть " tf.ширина" широкий...


здесь как вы это делаете в Spark:

Я изменил-упростил-его пример немного здесь:

var textMetrics:TextLineMetrics = label.measureText( label.text );  
var textWidth:int = textMetrics.width; 

вот способ, который также работает:

var tempText:Text = new Text();
tempText.regenerateStyleCache(false);
var textWidth:int = tempText.measureText(*yourstring*).width;

Как я думаю, textField.textWidth строительные работы в порядке... пока вы не измените размер шрифта. Кажется, он вычисляет ширину на основе шрифта 12px. Итак, если у вас есть встроенный шрифт и глобальный стиль, вы можете попробовать быстрое решение:

var realWidth = myLabel.textField.textWidth * (fontSize / 12);

Я пробовал это на длинных и коротких строках, и результат правильный.


Джошуа, это действительно помогает быть понятно. Вы говорите TextField, MX Label, Spark Label, RichText и т. д.? Различные текстовые компоненты используют различные текстовые движки, такие как FTE и TLF, и могут иметь разные решения. Конечно, я хотел бы, чтобы у Adobe был хороший набор утилит или пример кода, который мог бы предсказать размер шрифта, отображаемого на элементах управления, прежде чем вы это сделаете. Но, хорошая новость заключается в том, что в некоторых случаях-например, хорошее старомодное текстовое поле, вы можете предсказать это довольно хорошо. Вы просто делаете текстовое поле, устанавливаете его поле textFormat, метод автоматического размера и текст. Вы должны иметь возможность получить его размер, Прежде чем добавлять его в любом месте. Я не помню, какой был порядок, но я помню порядок, который вы установили, эти свойства имеют значение. Если вы не можете понять, как это сделать, я могу привести пример кода. Теперь, для новых, "улучшенных" компонентов, таких как Spark Labels - я буду проклят, если смогу найти чертов способ... потратил несколько часов на это и не нашел путь.. или кто-то знает способ :П.


после мой комментарий on quooответ, Вот код для той же цели, но просто захватывая ширину из TextField, используя TextLineMetrics а также:

    public function mtxtWidth(container:TextField):int {
       var lineMetrics:TextLineMetrics = container.getLineMetrics(0);
       return lineMetrics.width;      
    }

звучит так, как будто вы могли бы использовать textWidth