将文本格式设置为字符串的多个部分

时间:2014-08-02 07:22:25

标签: actionscript-3 textformat

我在将textformat应用于字符串的各个部分时遇到了问题:

feedBackText = "This is <b>bold</b>, and this is some more text, and <b>this is bold too</b>. But this is not bold. This is <b>bold</b>!";

feedbackTextField.htmlText = feedBackText;

var startBoldPos:int = 0;
var closeBoldPos:int = 0;
var i:uint = 0;

while(true) {

startBoldPos = feedBackText.indexOf("<b>", startBoldPos);
closeBoldPos = feedBackText.indexOf("</b>", startBoldPos);

if(startBoldPos > 0) {
    i++;
// Here is the main trouble:
    feedbackTextField.setTextFormat(_boldFormat, startBoldPos-((7)*i), closeBoldPos-((10)*i));
    trace("i is: " + i);
    trace("Feedbacktext: " + feedBackText);
    trace("Start bold: " + startBoldPos);
    trace("End bold: " + closeBoldPos + "\n");
} else {
// This works as expected
    feedbackTextField.setTextFormat(_boldFormat, startBoldPos, closeBoldPos-3);
    //  trace("Feedbacktext: " + feedBackText);
    //  trace("Start bold: " + startBoldPos);
    //  trace("End bold: " + closeBoldPos + "\n");
}       
if(startBoldPos == -1) break;
startBoldPos = closeBoldPos;
}

我正在尝试使用指定setTextFormat的索引,但它似乎与startBoldPos和endBoldPos不对齐。即使跟踪显示了在字符串中将setTextFormat放置在何处的正确数量。

任何想法都会被贬低!

此致 汉斯马格努斯

1 个答案:

答案 0 :(得分:0)

我测试了你的代码,它按预期工作。我不完全明白你想做什么,所以这里有一些一般性的评论:

  1. 您只能使用setTextFormat设置一些不htmlText的格式。在使用html标签分配文本后,textField文本将已经部分格式化。

  2. setTextFormat适用于text属性,因此计算的开始和结束索引取决于没有html标记的文本。在你的情况下它将是:这是大胆的,这是一些更多的文本,这也是大胆的。但这并不大胆。这很大胆!

  3. 逐步跟踪代码:

    1)使用 将文本设置为TextField中的htmlText属性。在此TextField包含之后:

    这是粗体,这是更多文字,这也是粗体。但这并不大胆。这是粗体

    2)循环开始。第一次迭代:

    startBoldPos-((7)*i) = 1
    closeBoldPos-((10)*i) = 5
    

    TextField:T 他的粗体,这是更多文字,这也是粗体。但这并不大胆。这是粗体

    3)第二次迭代:

    startBoldPos-((7)*i) = 39
    closeBoldPos-((10)*i) = 52
    

    TextField:T 他的粗体,这是更多tex t,这也是粗体。但这并不大胆。这是粗体

    4)第三次迭代:

    startBoldPos-((7)*i) = 87
    closeBoldPos-((10)*i) = 85
    

    没有任何改变,因为endPosition&lt;指定startPosition。

    5)第四次迭代:

    startBoldPos = -1
    closeBoldPos-3 = 12
    

    TextField:这是粗体,这是一些tex t,这也是粗体。但这并不大胆。这是粗体

    屏幕截图的最终结果:enter image description here

    UPDATE(没有setTextFormat方法的格式化):

    ...
    [Embed(source="GOTHIC.TTF", fontName="Gothic", embedAsCFF="false", advancedAntiAliasing="true")]
    private var gothicFont:Class;
    
    [Embed(source="GOTHICB.TTF", fontName="Gothic", embedAsCFF="false", advancedAntiAliasing="true", fontWeight="bold")]
    private var gothicFontBold:Class;   
    ...
    var feedBackText:String = "This is <b>bold</b>, and this is some more text, and <b>this is bold too</b>. But this is not bold. This is <b>bold</b>!";
    var feedbackTextField:TextField = new TextField();
    feedbackTextField.defaultTextFormat = new TextFormat("Gothic", 14);
    feedbackTextField.embedFonts = true;
    feedbackTextField.width = 500;
    feedbackTextField.htmlText = feedBackText;
    

    结果(如你所见的嵌入字体): enter image description here