我正在使用TLF来布置字典条目。它运行得相当好,但是我需要通过在FlowElements上设置样式属性来实现更精细的布局控制,主要用于水平间距和SpanElements上的设置填充,而与父项无关。
似乎最有希望的解决方案是将条目的各个元素分离到单独的容器中,并通过逐步为每个新元素添加新容器和ContainerControllers来使文本流过它们,并将大小设置为其内容边界,以便文本将流动进入每个新容器。
此ALMOST有效,但如果在应该转到不同容器的文本的两个部分之间插入额外的换行符,则文本将仅正确地流入下一个容器。没有换行符,容器的大小正确,但没有文本显示。
在这些示例中,我为容器sprite添加了边框,以便您可以看到它们被绘制的位置。除了换行符,文本完全相同。 Syllable字段是ParagraphElement中的SpanElement。发音标签和文本是另一个ParagraphElement中的单独SpanElements。
没有换行符:
'rab-bit'和'Sounds Like:'之间的换行符:
断线后'rae biht'(预先换行没有效果):
正如您所看到的,除非在文本之后添加换行符,否则发音不会显示,但是对齐关闭。没有换行符的组合似乎正确对齐它们。
有什么想法吗?这些错误在TLF中吗?我应该尝试不同的方法吗?我真的希望将所有文本都选为一个单元,我喜欢TLF提供的更好的渲染和控制,但我还需要布局灵活性。我想我可以通过换行和定位偏移这样一起破解一些东西,但它肯定不会很漂亮(或可维护)。谢谢你的阅读。
答案 0 :(得分:1)
我前段时间为Adobe Cookbooks写了一篇食谱,可能对你有帮助。基本上,我发现完全放弃使用span和paragraph元素更容易主要关注容器控制器。希望它有所帮助:
Generating a formatted TextFlow Layout for plain text assets
<强>更新强>
对于动态容器,您可以使用行尾分隔符来确定目标字符串,以及字符串长度,字体大小,填充等,您可以找到容器所需的大小并更改大小你的容器通过调用:
targetFlow.flowComposer.getControllerAt(controllerIndex).getContentBounds().width;
//and/or
targetFlow.flowComposer.getControllerAt(controllerIndex).getContentBounds().height;
这是我写的另一个方法,它自动更改文本流的字体大小以适合其容器:Automating font size for TextFlow containers
但不是像我一样改变字体大小,你可以改变容器大小以适合你的文字。
我希望这会有所帮助。