`
dengzhangtao
  • 浏览: 676325 次
  • 性别: 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...

    安卓字体使用多语言相关-AndroidFontsManager字体管理器.rar

    代码中的注释和结构可以作为理解Android字体管理和多语言支持原理的参考资料。同时,通过阅读和分析代码,开发者可以学习到如何高效地加载字体、管理语言资源以及处理多语言环境下的文本渲染。 四、具体使用方法 ...

    android 修改listview的不同item字体的颜色

    首先,我们需要理解ListView的基本工作原理。ListView通过Adapter来绑定数据源,每个列表项视图(ViewHolder)由一个布局文件定义。默认情况下,所有列表项的显示样式是一致的。若要改变特定item的颜色,我们需要在...

    android 插件式无刷新换肤和字体大小切换 兼容android 8.1

    在Android开发中,实现插件式的无刷新换肤和字体大小切换是一项重要的用户体验优化技术。这一功能能够使得用户在不重启应用的情况下自由调整界面风格和文字大小,提升使用舒适度,尤其对于视力不佳或者有个性化需求...

    Android应用框架原理

    Android应用框架原理是Android系统开发的核心组成部分,它构成了Android应用程序运行的基础。理解并掌握这一框架原理对于Android开发者来说至关重要,因为它涉及到应用的生命周期管理、UI布局、事件处理、数据存储等...

    android listView 改变选中行的 字体颜色和 图片

    要改变ListView选中行的字体颜色和图片,我们需要理解ListView的工作原理,以及如何自定义其Adapter和视图。以下是一些关键知识点的详细介绍: 1. **ListView的基本使用**: - ListView是一个视图容器,它能加载...

    android换肤原理实现

    - **兼容性问题**:考虑到Android系统的版本差异,需要确保换肤功能在各个版本上都能正常工作。可能需要使用反射或其他兼容库来处理一些API级别的差异。 - **性能优化**:动态加载资源会带来一定的性能开销,因此在...

    Android-可实现三级联动的选择器高仿iOS的滚轮控件字体大小自适应

    这对于提升自己的Android自定义View技能和理解Android布局与绘图原理非常有帮助。 总之,这个项目展示了如何在Android中创建一个功能丰富的、具有iOS风格的滚轮选择器,同时具备字体大小自适应的能力,从而适应各种...

    安卓设置全局字体大小

    无论是用户自行调整还是开发者在应用程序中实现,理解这一功能的工作原理和实现方式都能显著提高安卓设备的易用性。对于开发者而言,关注并支持全局字体大小的改变,不仅可以提升应用的可用性,还能体现对无障碍设计...

    Android 光影效果的文字动画特效.rar

    这个特效的实现原理主要是通过自定义View或者使用Android的动画框架来完成。在Android中,有两种主要的动画类型:属性动画(Property Animation)和视图动画(View Animation)。属性动画系统引入于API 11,可以对...

    android 放大镜 Magnifier

    在Android开发中,有时我们需要为用户提供一种便捷的方式来放大屏幕上的特定区域,比如在查看小字体或者微小细节时。这就是Android放大镜(Magnifier)功能的用途。它可以帮助用户更清晰地看到屏幕上难以辨认的部分...

    Android例子源码闪闪发光字体ShimmerforAndroid效果

    在Android开发中,为了提升用户体验和视觉吸引力,开发者经常使用各种动画效果来增强...在压缩包中提供的例子源码应该包含了完整的实现细节,通过阅读和学习源码,您可以更深入地理解Shimmer效果的工作原理和实现方式。

    快来看看讲解师-韩超-Android系统原理与开发要点详解

    根据提供的信息,我们可以总结出关于Android系统原理与开发要点的相关知识点。尽管提供的部分内容并不完整,但结合标题、描述以及标签,可以围绕Android系统的原理及开发要点进行深入探讨。 ### Android系统概述 ...

    安卓动画效果相关-android发光字体的实现.rar

    在提供的压缩包"android发光字体的实现"中,可能包含了示例代码和资源,这些代码可能包含了一个自定义的TextView类,实现了发光字体的逻辑。由于无法直接查看和验证代码,你需要自行解压并运行代码,根据需求调整...

    Android 仿IOS时间滚轮

    在Android开发中,为了提供与iOS类似的用户体验,开发者有时会尝试实现类似iOS的时间滚轮组件。这个组件通常用于选择日期、时间或者数值,其特点是可以滚动选择,视觉效果直观且易于操作。本篇文章将深入探讨如何在...

    android滑轮WheelView效果

    首先,我们要理解`WheelView`的基本结构和工作原理。它通常由一个可滚动的视图组成,视图中的每一项代表一个可选的值。当用户触摸并滑动时,视图会沿着垂直轴滚动,展示不同的选项。`WheelView`可以自定义样式,包括...

    android实现字体闪烁动画的方法

    首先,我们需要了解在Android应用中进行动画处理的基本原理。Android提供了多种方式来实现动画,如属性动画、帧动画和视图动画。对于简单的字体闪烁效果,我们可以不使用专门的动画框架,而是通过定时改变字体颜色来...

Global site tag (gtag.js) - Google Analytics