2013-10-03 13 views
0

使用任何版本的Flex 4.10 SDK时,以下代码将格式应用于整个段落而不是特定字符范围。将格式应用于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> 
+0

在选择传递给applyFormat的一个字符范围产生完全相同的错误效果仅供参考。有没有更好的方式让我随时使用TLF对文本进行着色? – JTtheGeek

回答

2

为applyFormat的这三个参数是用于三种不同的方法可以应用的格式。

第一个参数,“leafFormat”将得到应用到像SpanElement中LeafElement对象(或节点,如果你喜欢认为TLF生成XML)和实际上会创建一个新的一页,如果电流(或提供)SelectionState不包含整个LeafElement。

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

第三个参数“containerFormat”我从来没有用过,也没有真正查看过。我猜想它会将格式应用于整个ContainerController对象,这有助于布局文本。

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

因此,简而言之,我认为解决您的问题,你只需要改变你的函数调用:

objManager.applyFormat(objFormat, null, null); 
+0

大声笑,所以它在以前的版本中工作不正确,现在工作正常。谢谢! – JTtheGeek

+0

我还没有使用4.5之前的任何版本。我很确定它在4.5和4.6版本中可以正常工作,但是之前/之后的任何内容 - 谁知道... –

+0

自TLF 1.0开始,我们一直使用相同的代码库,并且目前活在app.dedoose上。 com在4.9 SDK下:-P – JTtheGeek