`
dengzhangtao
  • 浏览: 666619 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

android字体的工作原理

阅读更多
Android字体工作原理
    android字体由android 2D图形引擎skia实现,并在Zygote的Preloading classes中对系统字体进行load。
相关涉及到:
android的启动过程
ZygoteInit.java中的preloadClasses方法,对
/framework/base/preloaded-classes文件里面的类一一加载
Class.forName("android.graphics.Typeface");
Class.forName()会加载类到DVM(JVM),同时加载static代码块。
( java中class.forName和classLoader都可用来对类进行加载。前者除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。而classLoader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。Class.forName(name, initialize, loader)带参函数也可控制是否加载static块。并且只有调用了newInstance()方法采用调用构造函数,创建类的对象 )
static {
        DEFAULT         = create((String)null, 0);
        DEFAULT_BOLD    = create((String)null, Typeface.BOLD);
        SANS_SERIF      = create("sans-serif", 0);
        SERIF           = create("serif", 0);
        MONOSPACE       = create("monospace", 0);
       
        sDefaults = new Typeface[] {
            DEFAULT,
            DEFAULT_BOLD,
            create((String)null, Typeface.ITALIC),
            create((String)null, Typeface.BOLD_ITALIC),
        };

public static Typeface create(String familyName, int style) {
        return new Typeface(nativeCreate(familyName, style));
    }
nativeCreate()是jni方法的实现在(**.java里的jni一般名字也是**.cpp)
文件有:Typeface.cpp和skFontHost_android.cpp,其中后者是skia针对android平台字体实现的port。
1
0
分享到:
评论
1 楼 cczscq 2014-04-18  
楼主,我这里有个问题!
我这里有个自己制作的font.ttf,这个ttf是我自己制作的,只包含几个字,每个字都指定unicode,在win下使用正常。在android下,有部分手机显示乱码。我想了解下,setTypeface时,app内置字体和系统字体的加载机制。
这个问题困扰我好久啦,很期待你的帮助。谢谢
邮箱:cczscq@163.com

相关推荐

    Android字体大小自适应不同分辨率的解决办法

    Android字体大小自适应不同分辨率的解决办法 今天有人问我,Android系统不同分辨率,不同大小的手机,字体大小怎么去适应呢?其实字体的适应和图片的适应是一个道理的。 一、原理如下: 假设需要适应320×240,480...

    Android开发应用实战详解源代码

    1.2.1 准备工作 1.2.2 windows系统下的搭建过程 1.2.3 linux系统下的搭建过程 1.3 常见问题汇总 1.4 使用本书的配套实例 1.5 小结 第2章 android开发必备 2.1 android体系结构 2.1.1 各种库和android运行环境 2.1.2 ...

    Android高级编程--源代码

     《android高级编程》首先简要介绍android软件栈,接着陈述为手机创建稳定可靠、赏心悦目的应用程序的基本原理。通过学习,您可以打下牢固的理论根基,了解使用当前android 1.0 sdk编写定制移动程序所需的知识,还...

    Android代码-TextPathView是一个把文字转化为路径动画然后展现出来的自定义控件

    > 这里有原理解析! 使用  主要的使用流程就是输入文字,然后设置一些动画的属性,还有画笔特效,最后启动就行了。想要自己控制绘画的进度也可以,详情见下面。 Gradle compile 'com.yanzhikai:TextPathView:0.1.3'...

    字体大小修改

    Android系统的字体包路径为手机存储\system\font 其中三个字体包分别对应的字体如下: DroidSans.ttf 系统默认英文字体 DroidSans-Bold.ttf 系统默认英文粗字体 DroidSansFallback.ttf 系统默认中文字体 工具/原料

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——...

    Google Android SDK开发范例大全的目录

    4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示...

    Android代码-怪图制作

    核心代码在Utils.java,用文字代替像素块形成图片的算法原理如下: 1.根据原图片的大小和字体的大小创建一张空白图片 2.把原图片按字体的大小分成若干块,取每一块的像素的颜色的平均值 3.将指定文本以得到的平均...

    material-design-guideline:针对Android开发人员的库,该库要遵循Google Material Design原理创建布局

    适用于Android开发人员的轻量级库,可简化您使用XML资源的方式,尤其是在您严格遵循Google材料设计原则的情况下。 该库主要涉及XML资源。 例如,由原理定义的颜色或可由4dp整除的尺寸大小。 指南在这里。 。 话题 ...

    Android自定义控件打造闪闪发光字体

    在小米的开机动画和一些欢迎界面中, 我们经常看到这种闪闪发光的流光字体。看起来很炫酷,其实实现原理相当简单,我们只需要写自定义控件继承TextView,然后使用渲染器Gradient设置颜色渐变和Paint的setShadowLayer...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    传统方式根据主流系统分别开发相应的系统耗时又耗力,为了高效开发并节约开发项目成本,本文采用Android+HTML5相结合的方式进行移动端Web系统的设计研发工作。 然而,由于HTML5的W3C标准规范还未制定,安卓系统中类...

    技术面试必备知识点:Android、C、C++、Python、Flutter、Gradle、数据结构、计算机组成原理.zip

    功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可...

Global site tag (gtag.js) - Google Analytics