是否可以为不同的字符集应用不同的非嵌入字体?

时间:2013-01-16 10:00:56

标签: flex localization fonts flex4

我需要为不同的字符集应用不同的系统字体,如SimSun和Calibri,例如A,B,C ......和承,认...... 我有这个问题,因为象形文字在Calibri中是不可读的,但英文字母在SimSun看起来很难看。我希望我的应用程序看起来很漂亮。那么有谁知道我怎么能弄明白呢?

2 个答案:

答案 0 :(得分:1)

一种方法是根据当前语言环境动态加载不同的嵌入字体和CSS样式(这将确定需要哪些字符集)。

首先创建嵌入字体。

English.css

@font-face {
        fontFamily: Calibri;
        fontStyle: normal;
        fontWeight: normal;
        ...
}

Application
{
        font-family: Calibri;
}

Other.css

@font-face {
    font-family:SimSun;
    ... 
}

Application {
    font-family: SimSun
}

然后根据您的区域设置选择要加载的文件。声明CSS以便将字体应用于整个应用程序,因此您只需要在一个地方执行此操作,可能需要在应用程序preInitialize上执行此操作。

Application.mxml

loadLocaleFont() {
    var cssFileToLoad = getLocaleCssFile();
    var styleEvent:IEventDispatcher = StyleManager.loadStyleDeclarations(cssFileToLoad);
}

答案 1 :(得分:0)

您可以在自定义 FontManagement类中实现切换。如果主要字体不支持某种语言,请恢复为其他字体或使用系统字体(客户端的默认设置)。将该类用作格式化LabelTextField对象的集中点。

您可以尝试将字体嵌入到class css中,并将style名称分配给LabelTextField个对象。两者都应该有用。

var params:Object = {color:0xffffff , size:12, supported:false , etc...};
var tf:TextField= FontManagement.formatTextField(tf , params );

public class FontManagement
{
    public static function formatTextField( textfield:TextField , params:Object ):TextField
    {
        if( params.supported )
           tf.embedFonts = true;
        else
           tf.embedFonts = false;

        return textfield;
    }
}