2010-11-20 30 views
0

我使用TLF佈置字典條目。它工作得很好,但我需要通過在FlowElements上設置樣式屬性來實現更細緻的佈局控制,主要用於水平間距以及獨立於父母的SpanElements上設置填充。TLF - 通過多個容器和換行符流動文本

最有希望的解決方案是將條目的各個元素分隔到不同的容器中,並通過逐漸添加新容器和容器控制器來爲每個新元素添加大小設置爲其內容邊界的文本,以便文本將流入每個新的容器。

這個ALMOST可以工作,但是如果在應該到不同容器的兩段文本之間插入額外換行符,文本將只能正確地流入下一個容器。沒有換行符,容器的大小正確,但不顯示文本。

在這些例子中,我向容器精靈添加了邊框,以便您可以看到它們被繪製的位置。除了換行,文本是完全一樣的。音節字段是ParagraphElement中的SpanElement。發音標籤和文字是另一個ParagraphElement中的獨立SpanElement。

不換行:

no line break

隨着 'RAB位' 和 '聲音就像:':與換行符

1 break

隨着線突破後 'RAE biht' (事先斷行沒有效果):

2 breaks

正如您所看到的,除非在文本後添加換行符,否則不會顯示發音,但對齊將關閉。換行符的組合似乎沒有正確對齊。

任何想法? TLF中有這些錯誤嗎?我應該嘗試一種不同的方法嗎?我真的希望將所有文本作爲一個單元進行選擇,並且我喜歡TLF提供的更好的渲染和控制,但我也需要佈局靈活性。我認爲有可能我可以像這樣使用換行符和定位偏移量一起破解一些東西,但它肯定不會漂亮(或可維護)。謝謝閱讀。

回答

1

我寫了一本Adobe Cookbook的食譜,可能會幫助你。基本上,我發現使用跨度和段落元素完全放棄主要集中在容器控制器上更容易。希望它能幫助:

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

但是,如我所做的那樣,您可以更改容器大小以適合您的文本,而不是像以前那樣更改字體大小。

我希望這可以幫助。

+0

@TheDarkInl1978這是一篇很棒的文章。感謝您的鏈接。但我認爲你的例子和我試圖做的關鍵區別是固定的和動態的容器大小。在這篇文章中,你用一些常量大小的容器來佈局,然後通過它們流動文本,這似乎工作得很好。但是我想要做的是將文本的特定可變長度部分限制爲相應的獨立,尺寸適當的容器。你有什麼想法來調整你的方法來完成這項任務嗎?謝謝。 – Dane 2010-11-21 19:33:29

+0

對,當然。我已經更新了我的答案。 – TheDarkIn1978 2010-11-21 20:08:10

+0

@TheDarkIn1978感謝您的更新。這與我上面嘗試做的類似,但正如您所看到的,我遇到了很多與文本從容器流向容器不一致的地方。你是說我應該通過建立一個純文本字符串而不是添加FlowElements來做到這一點?我想我可以嘗試的一件事是首先爲每個文本段創建獨立的TextFlows(作爲純文本)以建立容器大小,然後將所有容器鏈接到完整的TextFlow。似乎效率低下,但也許值得一試。 – Dane 2010-11-21 20:55:13