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

开发 后端
Flex字体的概念你是否了解,本文向大家介绍一下如何在Flex中嵌入Flex字体,在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<font_list.length; 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. <?xml version="1.0" encoding="utf-8"?> 
  2. <mx:Application   
  3. xmlns:mx="http://www.adobe.com/2006/mxml"   
  4. layout="absolute" 
  5. styleName="plain" 
  6. > 
  7.   <mx:Script> 
  8.   <![CDATA[  
  9.     private function fontLoadComplete(evt:Event):void  
  10.     {  
  11.        try{  
  12.         Font.registerFont( evt.target.content["PixelFont"] );  
  13.  
  14.         txt1.setStyle("fontFamily", "04b_08");  
  15.        }  
  16.        catch(e:Error){  
  17.         trace(e.toString());  
  18.        }  
  19.     }  
  20.   ]]> 
  21.   </mx:Script> 
  22.     <mx:SWFLoader source="FontAssets.swf" complete="fontLoadComplete(event);"/> 
  23.     <mx:VBox> 
  24.         <mx:Text id="txt1" text="test words" fontSize="12"/> 
  25.         <mx:Text id="txt2" text="test words" fontSize="12"/> 
  26.     </mx:VBox> 
  27. </mx:Application> 
  28.  

 ◆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开发方法及特点解析 

 

 

责任编辑:佚名 来源: bbs.cnsoftware.cn
相关推荐

2010-08-09 15:41:13

Flex字体

2010-08-10 14:08:09

Flex嵌入字体

2010-08-06 13:22:48

FlexCSS

2010-08-13 10:01:46

Flex样式定义

2010-08-05 13:27:06

Flex布局

2010-07-30 12:56:02

Flex调用JavaS

2010-07-30 13:40:59

Flex开发

2010-08-09 15:19:29

Flex滚动条

2010-08-10 15:55:20

FlexHTML页面

2010-07-27 10:39:25

Flex组件

2010-08-09 16:01:37

Flex字体

2010-07-27 13:46:18

Flex swf

2010-07-27 15:36:15

Flex swf

2010-08-10 16:41:54

FlexJSP

2010-08-04 09:26:27

Flex数据

2010-08-09 15:52:28

2010-08-12 13:34:13

Flex验证组件

2010-08-09 10:21:56

XMLFlex

2010-07-30 10:37:23

Flex数据绑定

2010-07-30 15:18:26

Flex
点赞
收藏

51CTO技术栈公众号