将格式应用于Flex 4.10 SDK中的文本流中的字符范围

时间:2013-10-03 20:14:05

标签: flex

使用任何版本的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>

1 个答案:

答案 0 :(得分:2)

applyFormat的三个参数有三种不同的格式可以应用。

第一个参数“leafFormat”将应用于LeafElement对象,如SpanElement(或者节点,如果您更喜欢考虑TLF生成的XML),并且如果当前(或提供的)SelectionState没有实际创建新叶子不包含整个LeafElement。

第二个参数“paragraphFormat”将应用于当前(或提供的)SelectionState所属的整个段落。因此,如果我只从段落中选择几个字符,然后调用applyFormat,为“paragraphFormat”参数传递背景颜色,整个段落将获得背景颜色。

第三个参数,“containerFormat”我从未使用过,并没有真正考虑过。我猜它会将格式应用于整个ContainerController对象,以帮助布局文本。

您可以安全地为四个参数中的任何一个传递null(或完全不同的格式)。

因此,简而言之,我认为只需将您的函数调用更改为:

即可解决您的问题
objManager.applyFormat(objFormat, null, null);