Flex 中文字體終極解決方案


一直以來Flash對中文的支持就不是很好,很多人都發現很多漢字在Flex中無法設置粗體,就是其中一個表現,經過一晚上的折騰,終於突破了這個難題,其實,答案就在Adobe的官方教程里,只能怪自己英文水平太差,廢話不表,直入正題,為了便於描述,以google的思源黑體為例:

第一步:將字體編譯成swf文件

將自己需要的字體(常規和粗體一般是分開的兩個字體文件,如果你還需要斜體和粗斜體,也可拷貝進來)拷貝到自己的程序中,我這里是將思源黑體的NotoSansHans-Regular.otf和NotoSansHans-Bold.otf拷貝到src根目錄(這些在編譯后就可以刪掉了),然后在根目錄建立syht.css,內容如下:

/* 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,避免項目在重編譯時耗費時間.

第二步:加載字體文件

在主程序的初始化階段加載字體文件,這里我是將syht.swf放在程序根目錄.

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

上述代碼中主程序在載入完成后會立即加載syht.swf字體文件

第三步:添加對EmbeddedFontRegistry的引用

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

<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.css

如果提示找不到該文件,請直接去SDK包里對應的目錄下找,並拷貝到程序中,比如拷貝到根目錄,那么-theme+=MXFTEText.css即可

 

然后就可以設置fontFamily=syht來應用字體了,一般都是在global樣式中設定默認字體,我就不寫代碼了.

另外,如果是Flex3,那么請忽略第四步,並且第一步的css中embed-as-cff請設置為false


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM