0

我在将 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 的位置的正确数字。

任何想法都会受到赞赏!

问候, 汉斯·马格努斯

4

1 回答 1

0

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

  1. 您可以设置一些格式,而无需setTextFormat仅使用htmlText. 使用 html 标签分配文本后,textField 文本将已部分格式化。

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

并逐步跟踪您的代码:

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

这是粗体,这是更多文本,这也是粗体。但这并不大胆。这是大胆的!

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

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

TextField:这个粗体,这是一些文本,这个也是粗体。但这并不大胆。这是大胆的!

3)第二次迭代:

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

TextField: T this is bold , this is some more text t, this is bold。但这并不大胆。这是大胆的!

4)第三次迭代:

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

由于 endPosition < startPosition 没有任何改变。

5)第四次迭代:

startBoldPos = -1
closeBoldPos-3 = 12

TextField:这是粗体,这是更多的文本,这也是粗体。但这并不大胆。这是大胆的!

屏幕截图的最终结果:在此处输入图像描述

更新(没有 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;

结果(如您所见,使用嵌入字体): 在此处输入图像描述

于 2014-08-02T08:37:02.517 回答