感謝Text Layout Framework您現在可以通過文本進行任何操作。但有時實施起來可能會很艱鉅。
我有兩個解決方案給你。根據你所需要的控制級別,有一個簡單的和一個難。
最簡單的辦法
對於大多數使用情況下,這個解決方案應該做的罰款。我假設你想以段落式的方式顯示這些文本。在這種情況下,你可以只使用一個RichEditableText
和使用,而不是text
的textFlow
屬性,像這樣:
MXML
<s:RichEditableText id="textBox" top="100" paragraphSpaceAfter="15" />
AS
textBox.textFlow = TextFlowUtil.importFromString(
"<p>Click and start dragging the highlight here...</p>" +
"<p>Continue dragging the highlight through this one</p>" +
"<p>and keep going and finish highlighting them all right here</p>"
);
就是這樣。我使用paragraphSpaceAfter
樣式來在段落之間添加一些間距。您還可以將樣式添加到任何特定段落,以便更精確地控制其定位。
難的方法
如果你真的需要非常具體的控制(例如,如果三個文本框將必須在三個完全獨立的地方),那麼你可以做這樣的:
MXML
<mx:UIComponent id="obj_one" left="0" top="0" width="300" height="20"/>
<mx:UIComponent id="obj_two" left="50" top="30" width="300" height="20" />
<mx:UIComponent id="obj_three" left="100" top="60" width="200" height="40" />
AS
//create the TextFlow object
var text:TextFlow = TextFlowUtil.importFromString(
"<p>Click and start dragging the highlight here...</p>" +
"<p>Continue dragging the highlight through this one</p>" +
"<p>and keep going and finish highlighting them all right here</p>"
);
//make the text selectable
text.interactionManager = new SelectionManager();
//make all three of the area's control the same TextFlow object
text.flowComposer.addController(
new ContainerController(obj_one, obj_one.width, obj_one.height));
text.flowComposer.addController(
new ContainerController(obj_two, obj_two.width, obj_two.height));
text.flowComposer.addController(
new ContainerController(obj_three, obj_three.width, obj_three.height));
//once the 3 controllers are assigned, recalculate the composition
text.flowComposer.updateAllControllers();
正如你所看到的,我沒有爲此使用RichEditableText,因爲它已經使用了一個自己的流程聚合器和交互管理器,它會與我正在分配的流程衝突。現在您可以根據需要定位和調整三個容器的大小。
但請記住: 大多數使用案例都可以通過簡單解決方案的某些樣式來解決。 (我在此使用的MXML實際上很容易證明這種方法的合理性,但我必須以簡單的方式傳達這個想法)
那麼這可能是一種使用代碼複製文本的方法。但就像我在問題中所說的,我期待看看是否有可能創建一個最終用戶可以在文本之間拖動和突出顯示的情況。他們希望能夠在本地HTML文檔上獲得的方式 – brybam