[英]AS3 - Get font Class object for a TextField
在混合的Flash IDE / Flex项目中,我有一个TextField,并且想要检索与该TextField关联的Font类对象。 TextField位于CS4 IDE中创建的SWF中,并已加载到Flex 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.