在Flex/Flash项目中使用TLF(Text Layout Framework)的经验分享

在TLF出现之前,Flash中的文本排版支持是非常简陋的,相信很多朋友都深有同感,显然Adobe试图弥补这个缺陷,在Flash Player10中,我们可以使用TLF来增强文本布局,并实现一些之前很难实现的工作(比如对阿拉伯文的支持等等)。

在使用TFL之前,你需要了解下面几点:

  1. 如果用FB编译项目,且使用到了TLF,SDK版本必须为4.0或以上
  2. 如果在Flash CS5中使用TLF,编译为SWF,主文件大约增大50K,同时产生153K的SWZ共享库
  3. 如果在Flash CS5中使用TLF,编译为SWC,则整个TLF将被编译到SWC文件中,SWC文件增大约380K
  4. 在FB建立的ActionScript项目中使用第3步编译的SWC文件,重新编译后主文件亦增大大约380K
  5. 在FB建立的Flex项目中使用第3步编译的SWC文件,默认会将TLF作为SharedLibraray单独存储为SWZ文件,这样主文件会小一些,测试中,主SWF大约186K,SWZ则为153K
  6. Flash CS5的字体嵌入比CS4有所增强,你可以不再为某个文本框单独嵌入字体,而是在SWF中整体嵌入字体,并且指定Unicode Range(以前是不能指定的),这对于优化字体库体积非常有帮助

可见凡事有利必有弊,使用TLF无可避免的会增大一些体积,不过如果我们巧妙使用Runtime Shared Library,可以尽可能减小这方面的缺点。

在实际开发中,我们应该尽可能的将TLF文本内容和所需的字体嵌入分开,这样方便我们在运行时切换字体,而无需重新编译项目,示例步骤如下:

  1. 首先使用Flash CS5创建一个FLA文件,点击“文本”->“字体嵌入”,选择需要嵌入的字体和Unicode Range字符集,编译为SWF待用。
  2. 使用FB新建一个Action Script项目,加载刚才创建的字体库SWF,代码如下:
        
    1. fontLibLoader. load ( new URLRequest ( "font_lib.swf" ) , new LoaderContext ( false , ApplicationDomain . currentDomain ) ) ;
    2. fontLibLoader. contentLoaderInfo . addEventListener ( Event . COMPLETE ,initUI ) ;
  3. 最后在项目中直接创建TLF文本框或使用Flash中创建的SWC定义好的TLF文本框,运行时设定字体即可,代码如下:
        
    1. var test : Test = new Test ( ) ;
    2. var fmt : TextFormat = new TextFormat ( ) ;
    3. fmt. font = "Blackoak Std" ;
    4. test .txt. setTextFormat ( fmt ) ;
    5. test .txt. text = "ASDFGHsdfghj123456789" ;
    6. addChild ( test ) ;

你可能感兴趣的:(工作,Flex,Flash,Adobe,actionscript)