AS3文本处理:检测客户端是否包含特定字体

日常项目当中我们经常会使用一些比较特殊的字体来显示文本,比如微软雅黑等等;

但如果客户端没有相应的字体,我们必须用另一种常见的字体,并更改相应样式如:字号,行高...等等来替代,以达到相对完美的展示效果。

var txtFormat:TextFormat;
var txtField:TextField = new TextField();

if ("有微软雅黑字体")
{
    txtFormat = new TextFormat("微软雅黑", 11, 0x333333);
    txtFormat.leading = 3;
}else
{
    txtFormat = new TextFormat("宋体,Arial", 12, 0x333333);
    //微软雅黑的行高,比宋体高,此处要增加一定的行高来保证行间距。
    txtFormat.leading = 6;
}
txtField.defaultTextFormat = txtFormat;
txtField.text = "我爱北京天安门\n天安门上太阳升";

 

那么我们怎么才能判断客户端是否有我们需要的字体呢?

查官方文档也没用相应的API,但是Font 类有这么一个方法:enumerateFonts();

该方法的作用是:来获取包括所有设备字体(如果参数设置为true)和 嵌入字体的列表

于是想出了一个笨办法:可以通过它来得到当前客户端设备的字体列表,遍历并比对这个列表中每个字体的fontName,上代码:

private function 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;
} 

如果你有更高明的办法,欢迎留言或@ASV5赐教。。

转载于:https://www.cnblogs.com/rialover/archive/2012/10/24/2735978.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值