日常项目当中我们经常会使用一些比较特殊的字体来显示文本,比如微软雅黑等等;
但如果客户端没有相应的字体,我们必须用另一种常见的字体,并更改相应样式如:字号,行高...等等来替代,以达到相对完美的展示效果。
var txtFormat:TextFormat;
var txtField:TextField = new TextField();
if ("有微软雅黑字体")
{
txtFormat = newTextFormat("微软雅黑", 11, 0x333333);
txtFormat.leading = 3;
}else
{
txtFormat = newTextFormat("宋体,Arial", 12,0x333333);
//微软雅黑的行高,比宋体高,此处要增加一定的行高来保证行间距。
txtFormat.leading = 6;
}
txtField.defaultTextFormat = txtFormat;
txtField.text = "我爱北京天安门\n天安门上太阳升";
那么我们怎么才能判断客户端是否有我们需要的字体呢?
查官方文档也没用相应的API,但是Font 类有这么一个方法:enumerateFonts();
该方法的作用是:来获取包括所有设备字体(如果参数设置为true)和嵌入字体的列表;
于是想出了一个笨办法:可以通过它来得到当前客户端设备的字体列表,遍历并比对这个列表中每个字体的fontName,上代码:
privatefunction checkFontFamily(fontName:String):Boolean
{
var localFonts:Array = Font.enumerateFonts(true);
var f:Font;
var fName:String;
var hasFont:Boolean = false;
for (var i:int = 0, len:int = localFonts.length; i < len; i++)
{
f = localFonts[i] as Font;
fName = f.fontName;
if (fName == fontName)
{
hasFont = true;
return hasFont;
}
}
return hasFont;
}