2010-01-17 35 views
0

我有一個很長的單詞列表文本突出顯示和調用setTextFormat()每個單詞需要年齡。有一些方法可以加速此操作?我試着用TextField不在DisplayObject的列表中實例化,繞過渲染階段,但我已經發現性能是相同的。有任何想法嗎 ?加速setTextFormat()

+0

單詞列表有多長?這是列表中的每一個字,還是你在提取特定的單詞?你設置了什麼TextFormat參數?你能發佈你的示例代碼設置TextFormat對象並使用setTextFormat()嗎? – sberry 2010-01-17 17:57:33

+0

我想用不同風格和顏色突出顯示60k範圍的文字。我運行了一個for循環遍歷了我之前創建的一個Tokens Vector,併爲每個標記調用了textField.setTextFormat(token.styleInfo.format,token.begin,token.end);其中textField是一個TextField實例,而token.styleInfo.format是一個TextFormat實例。在我的測試着色60k令牌需要8分鐘 – wezzy 2010-01-17 20:04:10

回答

0

如果一個的htmlText和你想突出放入標籤,如<strong>你應該看看StyleSheet對象,你可以通過loading a css file定義它的樣式或您可以分配這樣的風格的話:

var style:StyleSheet = new StyleSheet(); 
var strong:Object = new Object(); 
strong.textDecoration = "underline"; 
style.setStyle("strong", strong); 
+0

感謝您的回覆。我檢查過htmlText,我知道它的速度快,然後setTextFormat(),但問題是,當用戶更改文本和使用htmlText時,我必須重新應用顏色我必須空白區域並用新版本和用戶替換htmlText看到文字區域閃爍,文字移動到最後。使用setTextFormat()我可以在文本更改 – wezzy 2010-01-17 20:06:41

+0

期間僅更改文本的一小部分,您可以將此錯誤更改爲一個功能,只需淡出文本,對其進行更改並將其重新淡入。但我不太瞭解用戶如何更改htmlText。 – antpaw 2010-01-17 20:19:56

+0

以及用戶與類似於標準Flex TextArea的組件交互,以便通過鍵入或使用剪切/粘貼來更改內容。我有一個更新事件的偵聽器,它更新了內部textField以反映內容更改。如果用戶寫一些東西,我必須再次着色文本和使用htmlText,這意味着我必須通過一個新的字符串htmlText – wezzy 2010-01-17 22:52:02

1

我強烈建議你看看Text Layout Framework處理富文本樣式的新模式。

本質上,TLF有一個TextFlow對象,其中包含文本的模型,包括所有相關的跨段特定的格式。這與文本顯示的「視圖」部分不同,它將由單獨的流程編輯器和EditManager進行管理(在您的可編輯文本的情況下)。

因此,您可以在大範圍的文本模型上執行格式轉換,並且只能在視圖的最後重新繪製自己的命令。

+0

嗨,我已經轉換使用文本佈局框架的代碼,我的代碼需要一個向量的標記和每個令牌調用 var selection:SelectionState = new SelectionState(this._textFlow,begin,end,normalFormat); 其中begin和end是兩個整數,代表要着色的區域,並且IEditManager(_textFlow.interactionManager).applyLeafFormat(format,selection); 應用我的格式(TextLayoutFormat的一個實例)。一切似乎都奏效,但比以前的版本慢了10倍。我做過任何錯誤?有沒有什麼聰明的解決方案(我敢肯定...)? – wezzy 2010-01-25 00:46:26

1

使用TLF,並在開始着色之前調用beginCompositeOperation();並在最後調用_objEditManager.endCompositeOperation();下面是一個示例右出我的代碼

_objFlow.interactionManager = _objEditManager; 
        _objEditManager.beginCompositeOperation(); 

        DocColoringUtils.SetRegionColor(_objFlow, iStart, iEnd, BackgroundColor.TRANSPARENT, 1); 

        var colRegions:Vector.<Region> = _objResourceMediator.GetCurrentResourceRegions(); 
        var objEditingExcerpt:Excerpt = _objExcerptingMediator.EditingExcerpt; 

        if (_objExcerptingMediator.InEditMode == true && objEditingExcerpt != null) 
        { 
         DocColoringUtils.ColorizeForEditMode(_objFlow, iStart, iEnd, colRegions, objEditingExcerpt.StartIndex, objEditingExcerpt.EndIndex, _objExcerptingMediator.SearchMatchRegions); 
        } 
        else 
        { 
         DocColoringUtils.ColorizeForNonEditMode(_objFlow, iStart, iEnd, colRegions, _objExcerptingMediator.SearchMatchRegions); 
        } 
        _objEditManager.endCompositeOperation(); 

        _objFlow.interactionManager = _objSelectionManager; 

最後,你應該只什麼顏色的可視範圍+/- 300個字符。然後在滾動中重新着色當前可視區域。這適用於http://www.Dedoose.com上的一些非常大的文檔。