Flash - не удается получить TextLayoutFormat из TLFTextField

Все, что я хочу сделать, это получить свойства форматирования TLFTextField и применить их к другому TLFTextField. Это было просто с использованием классического TextField:

var textFormat:TextFormat = text1.getTextFormat();
text2.setTextFormat(textFormat);

В TLFTextField есть функции getTextFormat и setTextFormat, но обе они содержат много ошибок. getTextFormat работает только в том случае, если вы измените свойство selectable на true, в противном случае он генерирует ошибку нулевого объекта. setTextFormat генерирует ошибку NaN, когда некоторые свойства объекта TextFormat не равны нулю.

Вместо этого предполагается использовать объект TextLayoutFormat для TLFTextFields. Вы устанавливаете объект, делая следующее:

var text1:TLFTextField = new TLFTextField();
var textLayoutFormat:TextLayoutFormat = new TextLayoutFormat();
var textFlow:TextFlow = text1.textFlow;
textFlow.hostFormat = textLayoutFormat;
textFlow.flowComposer.updateAllControllers();

Однако я не могу понять, как теперь «получить» TextLayoutFormat из text1. Один человек предложил следующее:

textLayoutFormat = ((text1.textFlow.getChildAt(0) as ParagraphElement).getChildAt(0) as SpanElement).computedFormat as TextLayoutFormat;

Но это только что вернуло ноль. Кто-нибудь знает, как получить TextLayoutFormat, чтобы я мог применить его к другому TLFTextField?


person Ashley Muller    schedule 04.11.2011    source источник


Ответы (2)


Вы используете Flex или Flash? У меня недавно были собственные головные боли с TLF. Эта страница была для меня хорошим ориентиром: http://flashthusiast.com/2010/05/05/getting-started-with-the-tlftextfield-class-in-actionscript-3-0-and-flash-cs5/ Вы устанавливаете текстовый формат перед текстом? Я сделал это, и у меня не было вашей нулевой проблемы.

person ChickensDontClap    schedule 04.11.2011
comment
Я использую FlashDevelop, который использует Flex SDK. Да, я устанавливаю формат текста перед тем, как установить текст. Я просмотрел эту статью, и они используют объект TextFormat вместо TextLayoutFormat. setTextFormat просто не нравится, когда некоторые свойства параметра TextFormat не равны нулю, например межстрочный интервал. - person Ashley Muller; 07.11.2011
comment
Хорошо, когда я запускаю getTextFormat, свойство 'leading' возвращаемого TextFormat является странным отрицательным числом, выглядит как min int, а свойство 'letterSpacing' равно NaN. Это приводит к сбою setTextFormat. Если я установлю для этих свойств значение null перед запуском setTextFormat, все будет в порядке, но, очевидно, он не получит нужный мне интервал между буквами и интерлиньяж. Я думаю, что открою новый вопрос для этого, так как это другая проблема. - person Ashley Muller; 07.11.2011

В простом случае это работает

var format:TextLayoutFormat = textField.textFlow.hostFormat as TextLayoutFormat;
format.fontFamily = fontFamily;
textField.textFlow.hostFormat = format;
textField.textFlow.flowComposer.updateAllControllers();
person average dev    schedule 01.11.2013