2013-10-03 44 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