在安卓操作系统下对于 TextView 字体的支持非常有限,默认情况下 TextView 的 typeface 属性支持 "Sans","serif","monospace" 这三种字体,如果在没有指定字体的情况下,系统缺省会使用 "Sans" 作为文本显示的字体。但这三种字体只支持英文,也就是说只要你显示的文字是中文,无论你选择这三种字体中的哪一种,显示效果都是一样的。为此,谷歌又提供了另外一种字体的支持方式:字库。在 Android 2.2 版本中,安卓对字库的支持是比较有限的,从 Android 2.3.3 版本开始,安卓系统已经能够支持大部分的字库。这意味着你在 SDK 版本为 Android 2.2 的平台下写的使用字库的代码只有在 Android 2.3.3 系统及其更的高版本中才能生效;如果你将代码运行在 Android 2.2 的系统上,你将不会看到自己所期望的效果,取而代之的是一片空白。
下面来看一下代码实现过程,在代码实现实现之前,我们先来看下不同字库的显示效果,下图中第一张图:SIMKAI.TTF 简体字-楷体-常规、第二张图:MSYH.TTF 简体字-微软雅黑-常规。
1 package cn.sunzn.fonts; 2 3 import android.app.Activity; 4 import android.graphics.Typeface; 5 import android.os.Bundle; 6 import android.view.Menu; 7 import android.widget.TextView; 8 9 public class MainActivity extends Activity { 10 11 private TextView tv_title; 12 private TextView tv_author; 13 private TextView tv_line1; 14 private TextView tv_line2; 15 private TextView tv_line3; 16 private TextView tv_line4; 17 18 public void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 setContentView(R.layout.activity_main); 21 /** 22 * 在 assets 目录下创建 fonts 文件夹并放入要使用的字体文件(**.ttf)并提供相对路径给 23 * createFromAsset(AssetManager mgr, String path) 来创建 Typeface 对象,再通 24 * 过TextView.setTypeface(Typeface tf) 指定文本显示的字体。 25 */ 26 Typeface face = Typeface.createFromAsset(getAssets(),"fonts/SIMFANG.TTF"); 27 28 tv_title = (TextView) findViewById(R.id.tv_title); 29 tv_title.setTypeface(face); 30 31 tv_author = (TextView) findViewById(R.id.tv_author); 32 tv_author.setTypeface(face); 33 34 tv_line1 = (TextView) findViewById(R.id.tv_line1); 35 tv_line1.setTypeface(face); 36 37 tv_line2 = (TextView) findViewById(R.id.tv_line2); 38 tv_line2.setTypeface(face); 39 tv_line3 = (TextView) findViewById(R.id.tv_line3); 40 tv_line3.setTypeface(face); 41 42 tv_line4 = (TextView) findViewById(R.id.tv_line4); 43 tv_line4.setTypeface(face); 44 } 45 46 public boolean onCreateOptionsMenu(Menu menu) { 47 getMenuInflater().inflate(R.menu.activity_main, menu); 48 return true; 49 } 50 51 }
最后,还需要补充说明一下:虽然采用这种方式可以实现自己想要的显示效果,但是在采用这种方法之前开发人员还是需要考虑下性能消耗和运行环境以及自己 APP 的风格,然后再做出对应的选择。原因有以下几点:
- 字库文件的大小:因为字库的尺寸少则几兆,多则几十兆,文件打包的时候对 *.ttf 格式的文件压缩率很低,所以会无形中增大 APP 的体积。
- 运行环境的考虑:如果你的应用面向的是高版本的运行环境,可以考虑使用这种方法,如果用户的运行环境是 Android 2.2 需要放弃该方法。
- 应用风格的考虑:如果你的应用既面向高版本运行环境,并且你的应用中统一使用指定的字体,可以考虑使用该方法;若是单单为了应用中的某几个字的显示效果就使用字库,则会得不偿失。
相关推荐
29种Android字库ttf文件,包括楷体,隶书,微软雅黑等常用字库,里面是百度云盘的下载地址。
LCD12864带字库使用手册 与编程 有汇编与C51编程 不错的哦
android Tesseract字库训练-英文 子库训练必备的Tesseract3.01和jTessBoxEditor安装程序、字库训练步骤、android扫描demo、字库训练成功之后的文件
包括:子库训练必备的Tesseract3.01和jTessBoxEditor安装程序、字库训练步骤、android扫描demo、字库训练成功之后的文件
LCD12864的中文字库编程说明书
android导入第三方字库,ttf或otf格式文件
之前在网上看到有很多OCR的相关资料,自己训练字库的资料也很多,但是关于训练字库后的多自字库联合使用资料则少之又少,其实在OCR3.02出来之后就已经支持多字库联合使用了,故记录下来,希望能对大家有所帮助!
Android系统的字库文件放在:alps\frameworks\base\data\fonts 其中DroidSans.ttf是默认英文字库;DroidSans-Bold.ttf是默认英文粗体字库;DroidSansFallback.ttf是默认中文字库。 以增加一套第三方的中文字库()为例...
NULL 博文链接:https://bgj.iteye.com/blog/2039795
VC编程:汉字识别(带字库)TinySvmTest 很好的VC编程算法!模式识别算法!
orc中文识别的中文字库,要放在工程的asset的目录下面才有用
字库制作软件,编程时总是会用到字库,可方便生成查看
HZK16点阵字库工具,C编程和单片机编程时要用到的
TS3字库提取软件,可以提取DGUS屏使用的汉字字库