繁体   English   中英

AS3-获取TextField的字体类对象

[英]AS3 - Get font Class object for a TextField

在混合的Flash IDE / Flex项目中,我有一个TextField,并且想要检索与该TextField关联的Font类对象。 TextField位于CS4 IDE中创建的SWF中,并已加载到Flex SWF中。

当前,如果满足以下条件,我的代码将起作用:

  1. 字体将导出到子SWF库中。
  2. TextField链接到导出的字体。
  3. 导出字体的名称在父SWF中进行了硬编码。

代码如下:

fontClass = childSwf.loaderInfo.applicationDomain.getDefinition("CustomFont") as Class;

我真正想做的是不必知道导出字体的名称。 相反,我想从TextField动态获取字体的Class或Class名称。

无需导出即可获得内置字体的类的功能更好。

FWIW,最终目标是获取任意文本字段,并使用Font :: hasGlyphs()检查它是否包含其嵌入字体无法显示的字符。 但是,子SWF中的字体未注册显示在Font :: enumerateFonts()中。

您可以使用它的getTextFormat函数获取文本字段的字体名称。 考虑txt是文本字段,然后

var format:TextFormat = txt.getTextFormat();
trace(format.font);

经过研究,我找到了这种解决方案,它可能可以解决问题。

import flash.text.TextField;
import flash.text.TextFormat;

import flash.utils.getQualifiedClassName;

import flash.text.Font;
import flash.display.Loader;
import flash.events.Event;
import flash.net.URLRequest;

var font:Font;
var txt:TextField;

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
loader.load(new URLRequest("sub_fla.swf"));

function onLoaded(e:Event){
    var cl:Class = e.currentTarget.applicationDomain.getDefinition("CustomFont") as Class;
    Font.registerFont(cl);
    trace(cl);

    txt = new TextField();
    this.addChild(txt);
    txt.text = "Moorthy";

    var format:TextFormat = new TextFormat();// = txt.getTextFormat();
    font = new cl();
    format.font = font.fontName;
    txt.setTextFormat(format);

    enumerateFonts();
}

function enumerateFonts(){
    var embeddedFonts:Array = Font.enumerateFonts(false);
    embeddedFonts.sortOn("fontName", Array.CASEINSENSITIVE);

    trace("---->"+embeddedFonts.indexOf(txt.getTextFormat().font));
    for(var i:int = 0;i<embeddedFonts.length;i++){
        font = embeddedFonts[i];
        trace("embeddedFonts["+i+"]:"+font.fontName+":"+font);  

        if(txt.getTextFormat().font == font.fontName){
            trace("My font class is '"+getQualifiedClassName(font) +"'");
        }
    }
}

不要忘记注册字体以将其获取到enumerateFonts列表中。 否则,它将获取默认字体类而不是您的自定义类。

否则,您可以简单地将一个变量添加到动画片段(放置文本字段的位置)中,以保存字体类或字体类名称。

例如:如果holder是包含文本字段的动画片段,则使用

holder.fontClass = cl

代替

Font.registerFont

您只需通过以下方式检索字体类

txt.parent.fontClass

如果是这样,则不需要这种方式的enumerateFonts

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM