可以在Flex中的多个RichEditableText对象之间选择文本吗?

时间:2011-08-15 00:35:10

标签: flash flex actionscript-3

例如,假设我有3个RichEditableText对象,我希望能够一起突出显示它们:

<s:RichEditableText id="obj_one" width="100%" text="Click and start dragging the highlight here..." selectable="true" editable="false" fontSize="9" />
<s:RichEditableText id="obj_two" width="100%" text="Continue dragging the highlight through this one" selectable="true" editable="false" fontSize="9" />
<s:RichEditableText id="obj_three" width="100%" text="and keep going and finish highlighting them all right here" selectable="true" editable="false" fontSize="9" />

甚至可以制作它以便所有三个都可以突出显示有人可以一次复制所有三个然后在某处复制所有文本?

谢谢!

编辑:我应该澄清,他们之所以会这样,是因为他们在itemRenderer中,所以他们每个人都会在列表的每一行中成为他们自己的对象。如果文本可以突出显示并复制,就像它们在一起一样,那就太好了。

想象一下最终用户希望能够将标准html文档中的任何其他文本拖动突出显示以便粘贴到其他位置的方式。

2 个答案:

答案 0 :(得分:1)

感谢Text Layout Framework,你现在几乎可以用文字做任何事情。但有时实施起来可能会令人生畏。

我有两个解决方案。根据您需要的控制级别,这是一个简单的控制和一个艰难的控制。

简单方法

对于大多数用例,这个解决方案应该没问题。我假设您想以段落式方式显示这些文本。在这种情况下,您只需使用一个RichEditableText并使用textFlow属性而不是text,如下所示:

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,因为它已经使用了自己的flowcomposer和interactionmanager,它会与我指定的那些冲突。现在,您可以根据需要定位和调整三个容器的大小。

但请记住: 大多数用例都可以通过简单的解决方案中的一些样式来解决。 (我在这里用作示例的MXML实际上很容易证明这种方法的合理性,但我必须以简单的方式传达这个想法)

答案 1 :(得分:0)

只需将具有背景颜色的样式放入富可编辑文本即可。并将每个组件的数据保存在ArrayCollection对象中。您可以在需要时获得它。

var mydata:ArrayCollection = new ArrayCollection();
mydata.addItem({value:obj_one.text}); 
mydata.addItem({value:obj_two.text}); 
mydata.addItem({value:obj_three.text});
OtherTextarea.text = mydata.getItemAt(0).value + " " .... etc