代码改变世界

[转]加载字体

2011-01-07 20:28  宝宝合凤凰  阅读(531)  评论(0编辑  收藏  举报

加载字体

为了达到一致并且美观的展现效果,我决定使用运行时加载字体的方式来给文本框设置样式。在网上找到和多这样的例子。大概的思路就是加载一个字体库,这个字体库是被编译到swf中的,加载完毕后使用Font来进行注册,然后吧文本框的embedFont开启,最后设置 TextFormat就行了,似乎很完美。
01 var loader:Loader = new Loader();
02 loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
03 loader.load(new URLRequest(“test2.swf”), new LoaderContext(false, ApplicationDomain.currentDomain));
04
05 function completeHandler(event:Event):void
06 {
07 var fontClass:Class = Class(ApplicationDomain.currentDomain.getDefinition(“YouyuanFont”));
08 var font:Font = new fontClass();
09 Font.registerFont(fontClass);
10 trace(font.fontName);
11
12 var tf:TextField = new TextField();
13 tf.border = true;
14 tf.type = TextFieldType.INPUT;
15 addChild(tf);
16
17 tf.embedFonts = true;
18 tf.defaultTextFormat = new TextFormat(font.fontName, 14, 0x0099FF, true, true);
19 tf.text = “input”;
20 }

可是有一点,往往中文的字库是非常大的上几兆的数据,加载起来是需要很长时间的,于是我的解决办法就是,只嵌入那些常用的汉字,这样数据就被控制在了400K的大小。而我又发现,其实这个需要加载的字体在大多数的中文操作系统中都会预装,所以又可以进一步改进下,就是先遍历所有的字体,如果没有找到,那再加载,可以在Font这个类中找到遍历的方法。

最后一个问题就是,中文不支持粗体或者斜体的字体,在FlashIDE中新建字体的面板中,粗体和斜体的样式都被禁用掉了。

而用FlexSDK编译时虽然fontWeight设为bold,可还是没办法显示出粗体的效果。