ActionScript - setTextFormat()多次使用相同的字符串?

时间:2011-05-04 13:04:38

标签: actionscript-3 text format set

我没有成功尝试将textFormat分配给同一个字符串的两个不同部分,但第二次没有注册并保持默认的文本格式。嵌入字体的两种样式(常规和粗体)。

//Create Text Field
private function createAboutWindowTextField():TextField
    {
    var aboutWindowFont:Font = new AboutWindowFont();

    var regularFormat:TextFormat = new TextFormat();
    var boldFormat:TextFormat = new TextFormat();

    regularFormat.size = boldFormat.size = 12;
    regularFormat.font = boldFormat.font = aboutWindowFont.fontName;
    regularFormat.align = boldFormat.align = TextFormatAlign.CENTER;
    boldFormat.bold = true;

    var result:TextField = new TextField();
    result.antiAliasType = AntiAliasType.ADVANCED;
    result.autoSize = TextFieldAutoSize.LEFT;
    result.defaultTextFormat = regularFormat;
    result.embedFonts = true;
    result.multiline = true;
    result.selectable = false;
    result.type = TextFieldType.DYNAMIC;

    result.text =   "First Header\n" +
                    "Version 1.0\n" +                                                           
                    "Copyright © 2011\n\n" +

                    "Second Header:\n" +
                    "Other info";                                                       

    result.setTextFormat(boldFormat, result.text.indexOf("First Header"), ("First Header").length);
    result.setTextFormat(boldFormat, result.text.indexOf("Second Header:"), ("Second Header:").length);

    return result;
    }

上面的代码应该导致“First Header”和“Second Header:”变为粗体,但只有“First Header”将被设置为粗体,而“Second Header:”似乎被简单地忽略。有什么问题?

1 个答案:

答案 0 :(得分:2)

setTextFormat函数的第三个参数不正确。当你想获得结束索引时,你正在使用长度。像这样:

var indexA:int = result.text.indexOf("Second Header:");
result.setTextFormat(boldFormat, indexA, indexA + ("Second Header:").length);

我喜欢使用StyleSheet格式化具有多种字体或字体粗细的文本字段。它管理起来要容易一些。

var reg:HelveticaReg = new HelveticaReg();
var bold:HelveticaBold = new HelveticaBold();

var format:TextFormat = new TextFormat(reg.fontName, 14, 0x000000);

var ss:StyleSheet = new StyleSheet();
ss.setStyle(".bold", {fontFamily:bold.fontName});

var tf:TextField = new TextField();
tf.width = 400;
tf.multiline = true;
tf.wordWrap = true;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.selectable = false;
tf.antiAliasType = AntiAliasType.ADVANCED;
tf.embedFonts = true;
tf.type = TextFieldType.DYNAMIC;
tf.defaultTextFormat = format;
tf.styleSheet = ss;
tf.htmlText = "<span class='bold'>Lorem ipsum dolor</span> sit amet, consectetur adipiscing elit.";
addChild(tf);