AS3 TextField未应用<b>标记</b>

时间:2011-04-27 09:58:01

标签: actionscript-3 flash-cs3

使用AS3我正在动态创建,调整大小,定位和格式化文本字段。我是从xml文件的内容动态设置文本字段的内容。我试图使用粗体标签,并注意到它不起作用。经过一番搜索,我能想出的最好的是“Flash CS4 tag in with htmlText”。底线:我必须嵌入一个鼓舞人心的字体。

举个例子,假设我想使用Tahoma。在我的.fla文件中(使用Flash CS4)我嵌入了Tahoma并将其导出以用于actionscript。这让我在我的文本域中使用Tahoma作为字体。如果我尝试使用b标记(textfield.htmlText="not bold, <b>bold</b>";),则粗体文本不会变得粗壮。基于上述问题,我现在已经嵌入了大胆的Tahoma版本。

如何将Tahoma的粗体版本与常规版本的Tahoma相关联,以便在使用粗体标记时,我的文本字段中会显示粗体文本?

3 个答案:

答案 0 :(得分:4)

要将文本的某些部分设置为粗体,您必须采用恼人的方式:TextFormats。

像这样;

var t:TextField = new TextField();
t.text = "this is bold";

var f:TextFormat = new TextFormat();
f.bold = true;

t.setTextFormat(f, 0, 4); // start at character 0, end at character 4

addChild(t);

这将输出以下内容:为粗体。

修改 这应该会更容易:

/**
 * Render a given portion of a String as bold
 * @param field The target TextField
 * @param needle The section of text to render bold
 */
function bolden(field:TextField, needle:String):void
{
    var tf:TextFormat = new TextFormat();
    tf.bold = true;

    var pos:uint = field.text.indexOf(needle);
    field.setTextFormat(tf, pos, pos + needle.length);
}


// example below
var t:TextField = new TextField();
t.text = "i like iced tea";

bolden(t, "iced");

addChild(t);

修改 怎么了。

/**
 * Apply <b> tags
 * @param field The target TextField
 */
function bolden(field:TextField):void
{
    var tf:TextFormat = new TextFormat();
    tf.bold = true;

    var pos:int = 0;
    var cls:int = 0;

    while(true)
    {
        pos = field.text.indexOf("<b>", pos);
        cls = field.text.indexOf("</b>", pos);

        if(pos == -1) break;

        field.setTextFormat(tf, pos+3, cls);
        pos = cls;
    }
}


// example below
var t:TextField = new TextField();

t.width = stage.stageWidth;
t.htmlText = "i like <b>iced</b> tea and <b>showbags</b>";

bolden(t);

addChild(t);

收益率:我喜欢 iced 茶和 showbags

答案 1 :(得分:0)

根据@Marty Wallace的回答:

我之前在代码中设置了我的textformat。它加载字体,大小等。

我正在做的是将字体应用于我的文本字段,然后如果字符串包含粗体标记,则将textformat bold属性设置为true。将代码放在setTextFormat之上会使整个文本字段变为粗体。出于某种原因,将其设置在文本字段下方只会使标记文本变为粗体。

textfield.setTextFormat(textformat);
if(xmlText.search('<b>')){
    textformat.bold = true;
}

[编辑]

不需要if:

textfield.setTextFormat(textformat);
textformat.bold = true;

[编辑]

您还需要嵌入的加粗字体才能工作。我将它从我的库中删除,无法再使用粗体&gt;。&lt;在我的tahoma示例中,字体名称必须是“Tahoma bold”。

所以现在我需要嵌入所有字体的大胆和斜体版本,如果我想使用&lt; b&gt;和&lt; i&gt;在我的htmlText

答案 2 :(得分:0)

在Flash中,将Dynamic TextField放在实例名称为“myTextField”的位置,并将以下代码放在时间轴上。 (仅用于测试目的,否则不建议使用时间轴代码),

 var str:String = <![CDATA[ <font face='Arial' size='18' align='left'> This is my <b>BOLD</b>  text </font>]]>;
 myTextField.htmlText = str;