学习总结 在Flex中如何嵌入Flex字体

本文和大家重点讨论一下在Flex中嵌入Flex字体方法,在Flex中所有非系统安装Flex字体都需要注册后才能使用。希望本文的介绍能让你有所收获。

在Flex中嵌入Flex字体方法总结

嵌入Flex字体

语法

 
 
 
  1. [Embed(source="C:/WINDOWS/Fonts/arial.ttf",   
  2. fontName="Arial",  
  3.  mimeType="application/x-font")]  
  4.  
  5. private var ArialFont:Class;  

source: 字体文件所在路径(本地)
fontName: 程序中所使用的字体别名
mimeType: 照抄就行了=_=

其中source还可以是指定为字体名称,而不一定是字体文件.另外还有其它属性可以设置,详细查看这里

在Flex中所有非系统安装Flex字体都需要注册后才能使用。对于一个用上述方法直接嵌入字体的Flex程序,该嵌入字体会被自动注册。
可以通过以下程序查询:

 
 
 
  1. var font_list:Array = Font.enumerateFonts();  
  2.  
  3. for(var i:int=0; i
  4.  
  5.     trace(Font(font_list[i]).fontName);  
  6.  

 嵌入的Flex字体会排列在前面.

◆问题是,如果系统里面有这个字体,我何必还要去嵌入呢?

假如你的系统里面有个奇怪的字体,当你肆无忌惮的用在了你的项目里,而整个作品仍到网上后,其它用户的机器里面没有这个奇怪的字体,他们可能就看不到,或者看到的是他们系统中所带字体显示出来的文字。这显然不是你想要的,所以,在使用一些别人可能没有的字体时,嵌入是很有必要的.但如果就这样直接嵌入,最直接的影响就是加大swf文件的大小.可怜我们这些用汉字的,一个中文字体动不动就几M...orz.如果一个项目有一堆swf要用几个相同的中文字体,每个swf都嵌一遍,估计这个项目加起来不会比帝国时代来的小-_-.说的再技术性一点,这么做还不便于维护,修改等等......
此类问题可算是老生常谈了,所以我们要做的办法就是共享字体.

这个方法在flash里面很简单,只要在库中选择添加新字体,然后选择自己要的字体,修改元件属性为共享导出,最后发布就行了.具体看这里

整个过程就是如何去使用共享库,这个技术很古老了,但还是很管用的,到了Flex2,这个过程实际上更简单了,如果有flash的朋友,可以直接看Flex的帮助 - 如何使用flash类型的字体

我这里要讲的是,不用flash,直接用Flex完成所有动作.

首先,挑个要嵌入的Flex字体,比如04b_08,这个字体不是每个人都装的.因为Flex可以用程序来支持直接嵌入字体,所以挑的字体不管是否已经安装在系统中,都是无所谓的.测试的时候,你也可以把安装在系统中的字体先删除(记得备份),有些系统字体是无法删除的,比如Arail,Verdana,宋体等.

接着,建立一个as文件,叫FontAssets.as好了,写入如下代码后保存 package

 
 
 
  1. {  
  2.  
  3.     import flash.display.Sprite;  
  4.  
  5.     public class FontAssets extends Sprite  
  6.  
  7.     {  
  8.  
  9.         [Embed(source="assets/04b_08.ttf", fontName="04b_08", mimeType="application/x-font")]  
  10.  
  11.         public var PixelFont:Class;  
  12.  
  13.     }  
  14.  
  15. }  

as3语法我就不多说了,不清楚的看这里

◆为什么要继承Sprite呢?

因为这个swf文件要在以后的程序中被加载.被加载的swf基类必须是继承Sprite的.你不信的可以试试不继承,这个swf可以通过编译,但加载他的就无法通过编译了,如果关掉严格检测,运行时就会抛异常...
其实嘛,想想flash,root的类型就是MovieClip,是必然存在的,所以要生成一个swf,必须继承Sprite也是合理的.因为在as3里面,MovieClip是继承Sprite的

◆两个字体对象,为什么要声明为public呢?

因为到时候要在外部访问这两个对象呀.当然,有心人也可以用getter方法来设置成为"只读"的,我这里就懒一下了^^_.

接着,建立一个mxml文件,叫testSharedFonts.mxml.写入以下代码并保存

 
 
 
  1.  
  2. xmlns:mx="http://www.adobe.com/2006/mxml"   
  3. layout="absolute" 
  4. styleName="plain" 
  5.    
  6.   
  7.     private function fontLoadComplete(evt:Event):void  
  8.     {  
  9.        try{  
  10.         Font.registerFont( evt.target.content["PixelFont"] );  
  11.  
  12.         txt1.setStyle("fontFamily", "04b_08");  
  13.        }  
  14.        catch(e:Error){  
  15.         trace(e.toString());  
  16.        }  
  17.     }  
  18.   ]]> 
  19.    
  20.      
  21.      
  22.          
  23.          
  24.      
  25.  
  26.  

 ◆Flex字体嵌入成功,要注意以下几点

1.注册字体的时候,访问PixelFont的方法是当初AS2时候典型的作弊方法,目的为了骗过编译器,省的它说,当前对象没有这个变量或方法.但是 AVM2比较牛,如果访问的变量或方法确实不存在或者是访问权限不对,它会在运行时抛异常,这也是为什么,上面我要声明为public的原因!

2.加载进来的共享字体,一定要先注册才能使用,对于FontAssets.swf,前面说过,当PixelFont在嵌入的同时就已经注册好了,但是对于testSharedFonts.swf,则不是,所以加载完了FontAssets.swf之后,还要注册.

3.一个FontAssets可以同时嵌入多个字体,这样就可以形成一个共享字体库,但要注意如果字体太多,这个库(swf文件)也会变的很大.

【编辑推荐】

  1. Flex滚动条常见问题解答
  2. FlexBuilder4十大新特性闪亮登场
  3. 学习笔记 Flex中设置Flex滚动条的样式
  4. 揭开Flex正则表达式的神秘面纱
  5. FlexBuilder开发方法及特点解析 

当前名称:学习总结 在Flex中如何嵌入Flex字体
浏览地址:http://www.shufengxianlan.com/qtweb/news45/410745.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联