加速setTextFormat()

时间:2010-01-17 17:34:23

标签: flex actionscript-3 performance textfield

我有一个文字,其中包含很长的单词列表要突出显示,并且每个单词调用setTextFormat()一个需要很长时间。有一些方法可以加速这个操作吗?我试过TextField没有在DisplayObject的列表中实例化,绕过渲染阶段,但我已经发现性能是相同的。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我强烈建议你看一下Text Layout Framework处理富文本样式的新模式。

基本上,TLF有一个TextFlow对象,其中包含文本模型,包括所有相关的特定于跨度的格式。这与文本显示的“视图”部分不同,后者将由单独的流合成器和EditManager进行管理(在可编辑文本的情况下)。

因此,您可以在文本模型的宽条带上执行格式转换,并且只能让视图在最后的命令上重新绘制。

答案 1 :(得分: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上的一些非常大的文档。

答案 2 :(得分: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);