Как автоматически установить ширину TextField()

Я пытаюсь установить ширину объекта Textfield() на основе его строкового содержимого, которое я установил. Есть ли способ динамически установить это после отправки строки в объект?

У меня есть:

var t1:TextField = new TextField()
t1.x = stage.stageWidth / 2;
t1.y = stage.stageHeight / 2;           
t1.text = "some string that i would want to render";            
t1.textColor = 0x000000;
t1.cacheAsBitmap = true;
addChild(t1);

Спасибо за любые предложения... jml


person jml    schedule 18.12.2009    source источник


Ответы (3)


TextField.autoSize?

изменить:

Вы должны правильно прочитать документацию, это переменная-член, которую действительно нужно установить. Я приведу краткий пример того, как это работает:

var tf:TextField = new TextField();
tf.text     = 'Some text.';
tf.autoSize = TextFieldAutoSize.LEFT;
tf.x = ( stage.stageWidth  - tf.width ) / 2;
tf.y = ( stage.stageHeight - tf.height ) / 2;

В качестве альтернативы вы также можете сначала выровнять текстовое поле и использовать TextFieldAutoSize.CENTER, чтобы выровнять его по центру.

person poke    schedule 18.12.2009
comment
милая. спасибо за этот ответ. Я не видел его в параметрах автозаполнения. - person jml; 19.12.2009
comment
Как я это пропустил... это как 5-е свойство в живых документах - person invertedSpear; 19.12.2009
comment
хм; на самом деле - похоже, это не работает... я опубликую свой код в другом ответе. - person jml; 19.12.2009
comment
Просто отредактируйте свой вопрос, я обновлю свой пост, чтобы ответить вам :) - person poke; 19.12.2009
comment
спасибо за помощь в этикете сайта и документах. если честно, я нахожу документы Adobe одним из самых неприятных руководств из существующих... но в будущем я постараюсь провести больше исследований о том, как вы должны заполнять переменные. я ранее установил переменную и получил ошибку (думал, что это логическое значение). - person jml; 19.12.2009
comment
LiveDocs на самом деле (имо) одно из лучших руководств по языкам программирования, и оно дает много информации о синтаксических данных членов; Например, autoSize:String [read-write] говорит, что его имя autoSize, и это String, который можно читать и записывать. И, конечно же, текст дает информацию, например, какие точные значения вы можете установить (в этом случае есть даже константы для 4 значений). - person poke; 19.12.2009

t1.text = "Some text";
t1.width = t1.textWidth + 5;
t1.height = t1.textHeight + 5;

Почему + 5? Потому что Adobe отстой и добавляет внутренний желоб вокруг ваших вещей. Согласно документам, это должно быть 2 пикселя на сторону, но на самом деле это немного больше, поэтому вы добавляете еще +1 для надежности.

person Cory Petosky    schedule 18.12.2009
comment
я должен признать, что textwidth работает просто отлично, и вам не нужно добавлять еще один импорт. - person jml; 19.12.2009

вы можете попробовать использовать метод getCharBoundaries() (он возвращает прямоугольник, окружающий символ по указанному индексу). Используйте это, чтобы получить прямоугольник из первого и последнего символов и установить ширину на разницу этих прямоугольников.

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

person invertedSpear    schedule 18.12.2009
comment
о, круто! нет; я совсем не возражаю против этого... я думаю, что общее правило работы с flex и flash заключается в том, что вы должны принять запутанный характер этого. :) - person jml; 19.12.2009
comment
хм; можете привести пример? вот что я пытаюсь: t1.x = stage.stageWidth / 2; t1.y = stage.stageHeight / 2; var st1:String = некоторая строка, которую я хотел бы отобразить; t1.текст = ст1; t1.width = t1.getCharBoundaries(st1.length)[1]; t1.textColor = 0x000000; t1.cacheAsBitmap = истина; добавить ребенка (t1); - person jml; 19.12.2009