如何在Flex Text Layout Framework ContainerController中只显示一个字母?

时间:2010-04-23 23:19:28

标签: flex fonts adobe tlf

我正在尝试在我的Flex应用程序中实现已删除的缩写功能。由于Text Layout Framework不支持浮动,唯一已知的解决方案是创建将链接在一起的其他容器,显示相同的文本流。这些容器的宽度和位置必须设置成假装它是浮动的。

我正在使用相同的解决方案来删除首字母缩写。基本上,我正在创建三个容器,一个用于首字母(文本流中的第一个字母),另一个用于文本浮动,第三个用于显示这两个下面的文本。所有这些容器共享一个文本流。

我强迫控制器只显示文本流中的一个字母,并相应地调整它的大小,这样它就不会占用任何不必要的附加空间,也不会再收到任何文本。

使用ContainerController.getContentBounds()返回字母的整个精灵的大小(带有上升/下降空部分),而不是实际渲染字母的高度/宽度。我正在使用textFlow.flowComposer.getLineAt(0).getTextLine()。getAtomBounds(0),但我认为它仍然不对。此外,即使我为此尺寸设置容器,它有时会在其中显示其他文本,尤其是对于较大的字体。见屏幕:

alt text http://img97.imageshack.us/img97/6105/tlfissue.png

另外,如果我将宽度设置为比contentBounds少1px,那么事情就会变得疯狂,容器会被移动,位置很大,等等。

我该如何解决这个问题?这是TLF / Player中的错误吗?我能以某种方式修复它吗? 我可以检测字母的大小,还是让containercontroller自动调整大小只适合一个字母?

1 个答案:

答案 0 :(得分:0)

您需要做的是将columnBreakAfter设置为BreakStyle.ALWAYS。这意味着您的单个字母需要位于ParagraphElement内部的SpanElement中。

示例:

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);