Android 字体加载

1.      Font配置文件

    位于frameworks/base/data/fonts

    system_fonts.xml  fallback_fonts.xml

 

文件结构

    <family>

        <nameset>

            <name>sans-serif</name>

            <name>arial</name>

            <name>helvetica</name>

            <name>tahoma</name>

            <name>verdana</name>

        </nameset>

        <fileset>

            <file>Roboto-Regular.ttf</file>

            <file>Roboto-Bold.ttf</file>

            <file>Roboto-Italic.ttf</file>

            <file>Roboto-BoldItalic.ttf</file>

        </fileset>

    </family>

 

可以称每一个 family为一个字体族。 包括:正常字体,粗体,斜体,粗体斜体,每个家族包括四种字体,这四种字体不是都必须的。

2.      字体加载

zygote初始化时preloadclass会加载Typeface类,在这个类中会调用jni-->skia 加载字体。

 

(1)一些数据类型,加载字体解析xml文件,保存到这些数据结构中。

 

structFontFamily {                           --->  family
    SkTDArray<const char*>   fNames;        --->   name     ---> gDefaultNames
    SkTDArray<FontFileInfo*>fFontFileArray;     --->  file       ---> gSystemFonts
    int order;
};

 

FontFamily可以理解为字体族,对应一个<family>标签。

SkTDArray<constchar*>   fNames 保存了<name>字段。

SkTDArray<FontFileInfo*>fFontFileArray 保存了<file>。

 

一个SkTDArray<FontFamily*>,可以保存整个xml文件信息。

structFontFileInfo {
    FontFileInfo() : fFileName(NULL),fVariant(SkPaint::kDefault_Variant),
            fLanguage() {
    }
    const char*          fFileName;
    SkPaint::FontVariant fVariant;
    SkLanguage           fLanguage;
};


FontFileInfo包含了三个字段,fFileName代表标签<file>里的字体文件名字;file 可以有属性 variant="elegant" 和 lang="ja&#

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值