1

我正在尝试在我的 Flex 应用程序中实现删除首字母功能。由于文本布局框架不支持浮动,唯一已知的解决方案是创建将链接在一起的附加容器,显示相同的文本流。这些容器的宽度和位置必须设置为假装它是浮动的。

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

我在强制控制器只显示文本流中的一个字母并相应地调整大小时遇到​​了很大的问题,这样它就不会占用任何不必要的额外空间,也不会再在其中输入任何文本。

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

替代文字 http://img97.imageshack.us/img97/6105/tlfissue.png

此外,如果我将宽度设置为比 contentBounds 少 1px,事情就会变得疯狂,容器会四处移动,定位有很大的边距等等。

我应该如何解决这个问题?它是 TLF / Player 中的错误吗?我可以以某种方式修复它吗?我可以检测字母的大小,或者使容器控制器自动调整大小以仅适合一个字母吗?

4

1 回答 1

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);
于 2012-10-05T22:52:50.763 回答