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即可

然后就可以设置fontFamily=syht来应用字体了,一般都是在global样式中设定默认字体,我就不写代码了.

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

时间: 2024-10-25 03:14:26

Flex 中文字体终极解决方案的相关文章

css中文字体乱码解决方案

css中文字体乱码解决方案:把css编码和html页面编码统一起来.如果html页面是utf-8.css.js也统一成utf-8编码.还有一个避免中文乱码的办法就是把中文字体写成英文来表示 css中文字体乱码解决方案: 把css编码和html页面编码统一起来.如果html页面是utf-8.css.js也统一成utf-8编码.如果html页面是gb2312.css.js也统一成gb2312编码.UTF-8和GB2312互转的最简单快捷的方法 还有一个避免中文乱码的办法就是把中文字体写成英文来表示,

ubunt18.04 wps 字体终极解决方案

http://www.oadun.com/2018/06/48.html 终于解决了wps里面不显示宋体.黑体等字体的问题,原来是我装的ubuntu是英文版的,所以字体名称也是英文版的,不过这个教程还是好. 解决思路,把windows中的字体需要的全部copy进来,然后就可以了 原文地址:https://www.cnblogs.com/zdj8023/p/11637973.html

vim、gvim在windows下中文乱码的终极解决方案

测试成功,完美解决. 只需修改VIM目录下面的这个文件_vimrc. 加油吧,骚年.很强大的! set encoding=utf-8 set fileencodings=utf-8,chinese,latin-1 if has("win32") set fileencoding=chinese else set fileencoding=utf-8 endif "解决菜单乱码 source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/

JSP中文乱码问题终极解决方案(下)

摘要: 本文首先从四个方面给出了在使用JSP过程中可能出现中文乱码的情形,具体包括JSP页面中文乱码.JSP源文件中文乱码.GET 请求的请求参数为中文乱码 和 POST 请求的请求参数为中文乱码四种情形,并针对每种情形给出了相应的终极解决方案. 一. JSP页面与JSP源文件乱码 在介绍JSP页面与JSP源文件的乱码问题前,首先我们必须对JSP页面中文乱码问题与JSP源文件中文乱码问题有一个清晰的概念,即: JSP页面中文乱码问题是指用户在浏览器看到的服务器所返回的jsp页面中,中文字符不能正

JSP中文乱码问题终极解决方案

在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的JSP中文乱码问题有如下几个方面:页面乱码.参数乱码.表单乱码.源文件乱码.下面来逐一解决其中的乱码问题. 一.JSP页面中文乱码 在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一种是在JSP中动态输出的中文乱码. 先看一个JSP程序: [java] view plaincopyprint? <%@ page language="java" import="java.util.

iText生成pdf中文字体解决方案

相信用过itext的朋友都知道,中文显示一直都是个问题(最新版5.5.7官方也没直接集成中文字体). 当然这样的问题,早就有高手解决了,那就是使用iTextAsian.jar. 但是本文介绍的,不是使用iTextAsian.jar,而是另一种解决方法. 在此之前,需要准备的仅仅为itextpdf-5.x.jar 和一个 ttf格式的中文字体.比如我们常用的宋体simsun.ttf. 我们首先要做的,就是将simsun.ttf集成到我们的项目中: 测试例子: package com.example

PyOpenGL利用文泉驿正黑字体显示中文字体

摘要:在NeHe的OpenGL教程第43课源代码基础上,调用文泉驿正黑字体实现中文字体的显示 在OpenGL中显示汉字一直是个麻烦的事情,很多中文书籍的文抄公乐此不疲地介绍各种方法及其在windows下的代码实现.此处不在赘述,有兴趣的可以参考下面的文章: OpenGL点阵字体绘制终极解决方案!哈! 下面的代码是在NeHe教程第43课的基础上,添加了中文字体显示功能,原则上只要字体库支持,任何unicode字符串都是可以显示的 btw,unbutu下字体库文件位置:/usr/share/font

中文版Chrome浏览器不支持12px以下字体的解决方案 (转)

中文版Chrome浏览器不支持12px以下字体的解决方案 Chrome 27之前的中文版桌面浏览器会默认设定页面的最小字号是12px,英文版则没有限制,主要是因为chrome认为汉字小于12px就会增加识别难度,尤其是中文常用的宋体和微软雅黑.而我们在实际项目中,对于数字/英文内容,其他字体的文本可能会有特殊的需求要求它们以更小的字号来显示,这个时候就需要取消浏览器的自动调整功能了. 一般解决方案是禁止webkit浏览器配置调整网页的字体大小.如下CSS定义方式: [css] view plai

Cocos2d-x 3.x 在wp8中调用系统字体的解决方案

问题和解决方法: 在使用cocos2d-x设计游戏的时候,字体是个很重要的部分.如果游戏中对字体没有太多的要求,就可以使用平台系统自带的字体,可以节省游戏的尺寸,以及减小游戏运行时所占用的内存.当加载系统字体的时候,wp8平台下就出现了问题. wp8平台下的系统自带的中文字体有一个叫等线字体的字体库,DengXian.ttf.我们想在代码中使用这个系统字体,比如创建一个标签: auto label=Label::create("这是简体中文","DengXian",