使用任何版本的 Flex 4.10 SDK 时,以下代码将格式应用于整个段落,而不是特定的字符范围。
https://issues.apache.org/jira/browse/FLEX-33791
<?xml version="1.0"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" creationComplete="OnCreationComplete(event)">
<s:TextArea width="100%" height="100%" id="txt" editable="true">
<s:content>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.<s:br/>
Vivamus eu erat ac est ullamcorper egestas eget nec mauris.<s:br/>
</s:content>
</s:TextArea>
<fx:Script><![CDATA[
import flashx.textLayout.edit.EditManager;
import flashx.textLayout.formats.TextLayoutFormat;
import mx.events.FlexEvent;
private function OnCreationComplete(event:FlexEvent):void
{
var objFormat:TextLayoutFormat = new TextLayoutFormat();
objFormat.backgroundColor = 0xB9CCFF;
txt.selectRange(5, 8);
var objManager:EditManager = txt.textFlow.interactionManager as EditManager;
objManager.applyFormat(objFormat, objFormat, objFormat);
}
]]></fx:Script>
</s:Application>
applyFormat 的三个参数用于应用格式的三种不同方式。
第一个参数"leafFormat"将应用于像SpanElement这样的LeafElement对象(或节点,如果你更喜欢考虑TLF生成的XML(,并且如果当前(或提供的(SelectionState不包含整个LeafElement,则实际上将创建一个新的叶子。
第二个参数"paragraphFormat"将应用于当前(或提供的(SelectionState所属的整个段落。因此,如果我只从一个段落中选择几个字符,然后调用applyFormat,为"paragraphFormat"参数传递背景颜色,则整个段落将获得背景颜色。
第三个参数,"containerFormat"我从未使用过,也没有真正研究过。我猜它会将格式应用于有助于布局文本的整个 ContainerController 对象。
您可以安全地为四个参数中的任何一个传递 null(或完全不同的格式(。
所以,简而言之,我认为要解决您的问题,您只需将函数调用更改为:
objManager.applyFormat(objFormat, null, null);