0

我正在使用 TLF 来布置字典条目。它工作得相当好,但我需要对布局进行更精细的控制,而不是通过在 FlowElements 上设置样式属性来实现,主要用于水平间距和在 SpanElements 上独立于其父项设置填充。

似乎最有希望的解决方案是将条目的各种元素分离到单独的容器中,并通过逐步为每个新元素添加新容器和 ContainerControllers 并将其大小设置为内容边界,从而使文本流过它们,以便文本流入每个新元素容器。

这几乎可以工作,但是如果在应该转到不同容器的两个文本部分之间插入额外的换行符,则文本只会正确流入下一个容器。如果没有换行符,容器的大小会正确,但不会显示任何文本。

在这些示例中,我为容器精灵添加了边框,以便您可以看到它们被绘制的位置。除了换行符之外,文本完全相同。音节字段是 ParagraphElement 中的 SpanElement。发音标签和文本是另一个 ParagraphElement 中的独立 SpanElement。

没有换行符:

没有换行符

'rab-bit' 和 'Sounds Like:' 之间有换行符:

1 次休息

在 'rae biht' 之后使用换行符(事先换行无效):

2 次休息

如您所见,除非在文本后添加换行符,否则不会显示发音,但随后会关闭对齐。换行符的组合似乎无法正确对齐它们。

有任何想法吗?这些是 TLF 中的错误吗?我应该尝试不同的方法吗?我真的很想将所有文本作为一个单元进行选择,我喜欢 TLF 提供的更好的渲染和控制,但我还需要布局灵活性。我想我可以用换行符和定位偏移来破解这样的东西,但它肯定不会漂亮(或可维护)。谢谢阅读。

4

1 回答 1

1

不久前,我为 Adob​​e Cookbooks 写了一个食谱,可能会对您有所帮助。基本上,我发现完全放弃使用 span 和 paragraph 元素而主要关注容器控制器要容易得多。希望能帮助到你:

为纯文本资产生成格式化的 TextFlow 布局


更新

对于动态容器,您可以使用行尾分隔符来确定您的目标字符串,以及它的字符串长度、字体大小、填充等,您可以找到容器所需的大小并相应地更改容器的大小通过调用:

targetFlow.flowComposer.getControllerAt(controllerIndex).getContentBounds().width;

//and/or

targetFlow.flowComposer.getControllerAt(controllerIndex).getContentBounds().height;

这是我编写的另一个配方,它自动更改文本流的字体大小以适应其容器: Automating font size for TextFlow containers

但不是像我所做的那样更改字体大小,您可以更改容器大小以适合您的文本。

我希望这有帮助。

于 2010-11-21T00:27:17.500 回答