TLFTextField上标as3

时间:2014-05-15 14:25:24

标签: actionscript-3 flash

我遇到了TLFTextField的问题,我似乎无法上标工作。代码应该做的是加载另一个swf文件,遍历每个显示对象,如果它找到一个id匹配的TLFTextField,用一个应该将分数转换为上标的标记替换该点。如果我使用字体标记,我能够在句点之后更改分数的字体大小,但我需要它来更改文本的基线。我看了一遍,还没找到任何适用于上标的东西。我试图将文字转换为上标的方式有问题吗?

dispObjArray = findChildrenByName(root, "price_id_" + key);
if (dispObjArray)
{
    for (var tlf:int=0;tlf<dispObjArray.length;tlf++)
    {                           
        if (dispObjArray[tlf] is TLFTextField) {        

            var supBegin:String = "<span baselineShift='superscript'>";
            var supEnd:String = "</span>";

            var sup:String = pricesDict[key].@Price;
            sup = sup.replace(".", supBegin) + supEnd;

            try { (dispObjArray[tlf] as TLFTextField).htmlText = sup; } catch (e:*) { trace(e); }
        }
    }
}

顺便说一句,我注意到在设置htmlText之后,span标记似乎被删除

1 个答案:

答案 0 :(得分:0)

所以为了让基线转换起作用,你必须添加

<TextFlow xmlns='http://ns.adobe.com/textLayout/2008'><p>

在文本前面,然后用

关闭它
</p></TextFlow>

例如,根据我可能使用的内容,它看起来像:

<TextFlow xmlns='http://ns.adobe.com/textLayout/2008'><p>9<span baselineShift='superscript'>00</span></p></TextFlow>

获得常规9和上标00。

我的最终代码如下:

dispObjArray = findChildrenByName(root, "price_id_" + key);
if (dispObjArray)
{
    for (var tlf:int=0;tlf<dispObjArray.length;tlf++)
    {                           
        if (dispObjArray[tlf] is TLFTextField) {        

            var sBegin:String = "<TextFlow xmlns='http://ns.adobe.com/textLayout/2008'><p>"
            var supBegin:String = "<span baselineShift='superscript'>";
            var supEnd:String = "</span>";
            var sEnd:String = "</p></TextFlow>";
            var sup:String = pricesDict[key].@Price;
            sup = sBegin + sup.replace(".", supBegin) + supEnd + sEnd;

            try { (dispObjArray[tlf] as TLFTextField).tlfMarkup = sup; } catch (e:*) { trace(e); }
        }
    }
}