Flex 中文字体终极解决方案

一直以来Flash对中文的支持就不是很好,不少人都发现不少汉字在Flex中没法设置粗体,就是其中一个表现,通过一夜的折腾,终于突破了这个难题,其实,答案就在Adobe的官方教程里,只能怪本身英文水平太差,废话不表,直入正题,为了便于描述,以google的思源黑体为例:css

第一步:将字体编译成swf文件java

将本身须要的字体(常规和粗体通常是分开的两个字体文件,若是你还须要斜体和粗斜体,也可拷贝进来)拷贝到本身的程序中,我这里是将思源黑体的NotoSansHans-Regular.otf和NotoSansHans-Bold.otf拷贝到src根目录(这些在编译后就能够删掉了),而后在根目录创建syht.css,内容以下:app

/* CSS file */
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";

@font-face
{
	src:url('NotoSansHans-Regular.otf');
	font-family:syht;
	font-weight:normal;
	embed-as-cff:true;
}

@font-face
{
	src:url('NotoSansHans-Bold.otf');
	font-family:syht;
	font-weight:bold;
	embed-as-cff:true;
}

而后右键:Compile CSS to SWF,编译后会在目标文件夹生成syht.swf文件,这个就是包含了思源黑体的字体文件了,而后能够删除掉字体文件和syht.css,避免项目在重编译时耗费时间.字体

第二步:加载字体文件flex

在主程序的初始化阶段加载字体文件,这里我是将syht.swf放在程序根目录.google

protected function application1_initializeHandler(event:FlexEvent):void
{
      FlexGlobals.topLevelApplication.styleManager.loadStyleDeclarations2("syht.swf", true);
}

上述代码中主程序在载入完成后会当即加载syht.swf字体文件url

第三步:添加对EmbeddedFontRegistry的引用spa

在主程序中import mx.core.EmbeddedFontRegistry;orm

<fx:Script>
    <![CDATA[
        import mx.core.FlexGlobals;
        import mx.events.FlexEvent;
        import mx.core.EmbeddedFontRegistry;
        EmbeddedFontRegistry;
			
        protected function application1_initializeHandler(event:FlexEvent):void
        {
            FlexGlobals.topLevelApplication.styleManager.loadStyleDeclarations2("syht.swf", true);
        }

    ]]>
</fx:Script>

第四步:添加编译选项-theme+=frameworks\projects\spark\MXFTEText.cssblog

若是提示找不到该文件,请直接去SDK包里对应的目录下找,并拷贝到程序中,好比拷贝到根目录,那么-theme+=MXFTEText.css便可

 

而后就能够设置fontFamily=syht来应用字体了,通常都是在global样式中设定默认字体,我就不写代码了.

另外,若是是Flex3,那么请忽略第四步,而且第一步的css中embed-as-cff请设置为false

相关文章
相关标签/搜索