Android字体Font相关知识

Android字体简介

Android系统默认支持三种字体,分别为:“sans”,“serif”,“monospace”。

android.graphic.typeface字体类:


本类的常量静态定义,首先为字体类型(typeface)名称

TypefaceDEFAULT
Typeface DEFAULT_BOLD
Typeface MONOSPACE
TypefaceSANS_SERIF
Typeface SERIF

字体风格(style)名称

intBOLD
int BOLD_ITALIC
int ITALIC
int NORMAL

设置TextView的字体可以通过TextView中的setTypeface方法来指定一个Typeface对象,因为Android的字体类比较简单,我们列出所有成员方法:

staticTypeface create(Typeface family, int style)//静态方法,参数一为字体类型这里是Typeface的静态定义,如宋体,参数二风格,如粗体,斜体

staticTypeface create(String familyName, int style)//静态方法,参数一为字体名的字符串,参数二为风格同上,这里我们推荐使用上面的方法。

staticTypeface createFromAsset(AssetManager mgr, String path)//静态方法,参数一为AssetManager对象,主要用于从APK的assets文件夹中取出字体,参数二为相对于Android工程下 的assets文件夹中的外挂字体文件的路径。

staticTypeface createFromFile(File path)//静态方法,从文件系统构造一个字体,这里参数可以是sdcard中的某个字体文件

staticTypeface createFromFile(String path) //静态方法,从指定路径中构造字体

staticTypeface defaultFromStyle(int style) //静态方法,返回默认的字体风格

intgetStyle() //获取当前字体风格

finalboolean isBold() //判断当前是否为粗体

finalboolean isItalic() //判断当前风格是否为斜体

Android字体工作原理

android字体由android 2D图形引擎skia实现,并在Zygote的Preloading classes中对系统字体进行load。
相关文件有:skTypeface.cpp和skFontHost_android.cpp,其中后者是skia针对android平台字体实现的port。

主要的变量有:

struct FontInitRec {

const char*         fFileName;

const char* const*  fNames;     // null-terminated list

};

struct FamilyRec {

FamilyRec*  fNext;

SkTypeface* fFaces[5];

};

uint32_t gFallbackFonts[SK_ARRAY_COUNT(gSystemFonts)+1];

load_system_fonts()@skFontHost_android.cpp

load系统中所有的字体并给每种字体分配唯一的ID,并将字体分为两种:FamilyFonts和FallbackFonts,skPaint通过应用程序设置的字体(Typeface)所对应的ID最终实现字符的显示。

替换Android默认的汉字字体

在android系统中,DroidSans是默认字体,只包含西方字符,应用程序默认情况下都会调用它,

而DroidSansFallback包含了东亚字符,当需要显示的字符在DroidSans字体中不存在(如:汉字)时,
即没有对应编码的字符时,系统会到DroidSansFallback中去找相应编码的字符,如果找到,
则使用DroidSansFallback字体来显示它,如果仍找不到该编码对应的字符,则无法在屏幕上显示该字符。

更换默认中文字体的步骤为:

1、将幼圆字体库youyuan.ttf重命名为DroidSansFallback.ttf,覆盖Android源码中frameworks/base/data/fonts目录下的DroidSansFallback.ttf文件

2、重新编译Android系统

3、编译SDK。生成的SDK中,android默认的中文字体已更换为幼圆字体。该方法的不足是删除了Android系统原来的中文字体

为android系统添加一种默认字体

在android系统中,默认的中文字体只有一种:DroidSansFallback.ttf,如果想在android应用程序中随意设置想要的中文字体,除了在应用程序中通过assets目录引入字体文件外,还可以通过增加android默认字体的方式来实现。

添加步骤大致如下:

1、在frameworks/base/data/fonts目录下添加字体文件,例如Driod-kaishu.ttf;

2、在skia中增加楷书这一字体,需要修改的文件主要有skFontHost.cpp、skTypeface.cpp、Typeface.java等;

3、在java层添加楷书字体相关API,需要修改的文件主要有typeface.java和textview.java;

4、编译SDK

5、将新生成的sdk导入eclipse,在eclipse中即可通过setTypeface(Typeface.KAISHU)和android:typeface=(“kaishu”)两种方式设置自己添加的字体

时间: 2024-11-11 22:45:50

Android字体Font相关知识的相关文章

android连接wifi相关知识

这里列了很多,但是大致可以分为四个主要的类ScanResult wifiConfiguration WifiInfo WifiManager (1)ScanResult,主要是通过wifi 硬件的扫描来获取一些周边的wifi 热点的信息. 在我们进行wifi 搜索的时候,一般会搜到这些信息,首先是接入点名字.接入点信息的强弱.还有接入点使用的安全模式,是WPA.WPE. 打开这个类,我们可以看到以下几个信息 BSSID 接入点的地址,这里主要是指小范围几个无线设备相连接所获取的地址,比如说两台笔

android手机字体库相关问题深入剖析

hi,all:   问题一.android系统支持什么字体库? 1.Android系统默认支持三类字体家族,分别为:"serif", "sans-serif", "monospace",那如何证明?具体论证与定义详见下面的知识点. 这三类字体家族,每一类都包括若干个*.ttf的字体文件. 除此之外,每个设备厂商在此基础上,都会额外增加一些自己定义的字体文件*.ttf,以兼容更多的语言及字体风格. 以三星手机(SM-N7508V)为例:这些字体文件

一文让你彻底了解iOS字体相关知识

作者:董铂然 授权本站转载. 写本文的契机主要是把自己整理的关于iOS字体方面的知识不断更新写在这篇博文中,用来自己以后查阅. 一.iOS原生字体展示 在 label中选择字体的font,并把font由system改成custom后,就能在family中看到72种特殊字体.这些里面就有很炫的字体,但 是全部是只针对英文数字,对中文无效.写了一个程序把所有的原生样式遍历出来展示可以达到如下效果.可以清楚地看到每个字体对应的样式,不用再一个个试 了. 如果你不是在董铂然博客园看到本文,请点击查看原文

【ALearning】第二章 Android工程相关知识介绍

本章主要初步介绍Android工程开发环境的搭建,以对Android项目整体的认识与了解.本章包括Android开发环境搭建.第一个Android项目Hello World与Android项目的文件目录结构介绍. Android开发环境搭建 Android开发环境的搭建方式有两种,分别是Eclipse/MyEclipse+ADT+Android SDK和Android Developer Tools.前者方式的开发环境搭建,参看[http://blog.sina.com.cn/s/blog_4e

Android Studio 3.1.2 修改字体(font)大小(size) 及老版本修改主题、字体、颜色 参照地址

Android Studio 3.1.2  修改字体(font)大小(size) 步骤:File-Settings-Editor-Color Scheme-Color Scheme Font-Size 图片:         老版本as修改主题.字体.颜色 参照地址: https://blog.csdn.net/bangyiqing/article/details/52241746 原文地址:https://www.cnblogs.com/1502720115chenzhen/p/9063176

客户端相关知识学习(十一)之Android H5交互Webview实现localStorage数据存储

前言 最近有一个需求是和在app中前端本地存储相关的,所以恶补了一下相关知识 webView开启支持H5 LocalStorage存储 有些时候我们发现写的本地存储没有起作用,那是因为默认WebView没有开启LocalStorage存储.开启方法如下 首先得有Webview控件: 有人问我是不是需要写布局文件,不写行不行,现在我就告诉你们,不写没问题,需要写就写不写直接创建New一个也行. 下面我就介绍一个,我new一个Webview实现localStorage. WebView mywebV

android字体大小根据分辨率自动调整

手机设备太多,分辨率也不一样,看到网上大部分的适应字体的方法是定义values320×480或value-hdpi方式去处理. 采用第一种的就惨了,很多设备的分辨率是不一样的,难道要每种都定义吗? 采用第二种的在平板电脑里没有效果. 最后还是代码的方式方便快捷... Java代码 1.//遍历设置字体 2.public static void changeViewSize(ViewGroup viewGroup,int screenWidth,int screenHeight) {//传入Act

无线性能测试相关知识

几个容易混淆的概念: 备注:灰度测试,小部分的投放市场,大部分用户采用原来的应用,小部分的采用新版本. 性能测试和负载测试等的主要区别是目的不同 负载测试是通过改变系统负载方式.增加负载等来发现系统中所存在的性能问题.负载测试是一种测试方法,可以为性能测试. 压力测试所采用.负载测试的加载方式也有很多种,可以根据测试需要来选择. 性能测试是为获取或验证系统性能指标而进行测试(特定负载).多数情况下,性能测试会在不同负载情况下进行. ·压力测试通常是在高负载情况下来对系统的稳定性进行测试,更有效地

HTML入门基础教程相关知识

HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文本文档的一种简单标记语言,经常用来创建web页面.html文件是带有格式标识符和超文本链接的内嵌代码的ascii 文本文件——html结构了解. html文本是由 html命令组成的描述性文本,html 命令可以说明文字. 图形.动画.声音.表格.链接等. html网页结构包括头部 (head).主