Как отобразить только одну букву в контейнере Flex Text Layout Framework ContainerController?

Я пытаюсь внедрить функцию отбрасывания инициалов в свое приложение Flex. Поскольку Text Layout Framework не поддерживает плавающее, единственное известное решение - создать дополнительные контейнеры, которые будут связаны вместе и отображать один и тот же текстовый поток. Ширина и расположение этих контейнеров должны быть установлены таким образом, чтобы они делали вид, что они плавают.

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

У меня большие проблемы с принуждением контроллера отображать только одну букву из текстового потока и соответствующим образом изменять ее размер, чтобы он не занимал лишнее дополнительное пространство и не помещал в него больше текста.

Использование ContainerController.getContentBounds () возвращает мне размер всего спрайта буквы (с пустыми частями подъема / спуска), а не высоту / ширину фактического отображаемого письма. Я использую textFlow.flowComposer.getLineAt (0) .getTextLine (). GetAtomBounds (0), но я думаю, что это все еще неправильно. Кроме того, даже если я установил контейнер для этих размеров, он иногда отображает в нем дополнительный текст, особенно для больших шрифтов. См. Экран:

альтернативный текст http://img97.imageshack.us/img97/6105/tlfissue.png < / а>

Кроме того, если я установлю ширину всего на 1 пиксель меньше, чем у contentBounds, все сойдет с ума, контейнеры будут перемещаться, располагаться с большими полями и т. Д.

Как мне решить эту проблему? Это ошибка в TLF / Player? Можно как-нибудь исправить? Могу ли я определить размер письма или настроить автоматический размер контейнера, чтобы он поместился только в одну букву?


person rattkin    schedule 23.04.2010    source источник
comment
Вы пробовали использовать: textFlow.flowComposer.getLineAt (0) .getBounds ()   -  person ZackBeNimble    schedule 27.04.2010


Ответы (1)


Что вам нужно сделать, так это установить для columnBreakAfter значение BreakStyle.ALWAYS. Это означало бы, что ваша единственная буква должна быть в собственном SpanElement внутри ParagraphElement.

Пример:

var p:ParagraphElement = new ParagraphElement();
p.columnBreakAfter = BreakStyle.ALWAYS; //Forces a break in the container

var span:SpanElement = new SpanElement();
span.text = "A";

p.addChild(span);
person zachzurn    schedule 05.10.2012