在安卓操作系统下对于 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 须要放弃该方法。
  • 应用风格的考虑:假设你的应用既面向高版本号执行环境。而且你的应用中统一使用指定的字体,能够考虑使用该方法;若是单单为了应用中的某几个字的显示效果就使用字库,则会得不偿失。

Android 编程下字库的使用的更多相关文章

  1. Android 编程下 App Install Location

    从 API 8 开始(参考官方文档:App Install Location | Android Developers),你可以将你的应用安装在外部储存中(例如,安装到设备的 SD 卡上).这是一个可 ...

  2. Android 编程下的自定义 xmlns

    什么是 xmlns xmlns是 XML Namespaces 的缩写,中文名称是 XML命名空间. xmlns 使用规则 xmlns:namespace-prefix="namespace ...

  3. Android 编程下 DP、SP 以及屏幕像素密度

    有时需为视图属性指定大小尺寸值(通常以像素为单位,但有时也用点.毫米或英寸).最常见的属性有: 文字大小(Text Size),指设备上显示的文字像素高度: 边距(Margin),指定视图组件间的距离 ...

  4. Android 编程下 Touch 事件的分发和消费机制

    Android 中与 Touch 事件相关的方法包括:dispatchTouchEvent(MotionEvent ev).onInterceptTouchEvent(MotionEvent ev). ...

  5. Android 编程下的四大组件之服务(Service)

    服务(Service) 是一种在后台运行,没有界面的组件,由其他组件调用开始.Android 中的服务和 Windows 中的服务是类似的东西,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类 ...

  6. Android 编程下的 Secret Code

    我们很多人应该都做过这样的操作,打开拨号键盘输入 *#*#4636#*#* 等字符就会弹出一个界面显示手机相关的一些信息,这个功能在 Android 中被称为 Android Secret Code, ...

  7. Android 编程下图片的内存优化

    1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource. BitmapFactory.decodeResource 来设置一张大图,因为这些方法在完成 ...

  8. Android 编程下的代码混淆

    什么是代码混淆 Java 是一种跨平台的.解释型语言,Java 源代码编译成中间”字节码”存储于 class 文件中.由于跨平台的需要,Java 字节码中包括了很多源代码信息,如变量名.方法名,并且通 ...

  9. Android 编程下去除 ListView 上下边界蓝色或黄色阴影

    默认的情况下,在 ListView 滑动到顶部或者是底部的时候,会有黄色或者蓝色的阴影出现.在不同的版本上解决的方法是不同的,在 2.3 版本之前可以在 ListView 的属性中通过设置 andro ...

随机推荐

  1. Java中内存泄露及垃圾回收机制

    转自:http://blog.sina.com.cn/s/blog_538b279a0100098d.html 写的相当不错滴...................... 摘  要 Java语言中,内 ...

  2. Struts2-Spring和Hibernate整合

    Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用.作为最成功的Web框架,Struts自然拥有众多的优点:MVC 2模型的使用.功能齐全的标志库(Tag Libr ...

  3. Windows下如何安装 Composer

    如何安装 Composer Windows下如何安装 Composer 下载 Composer 安装前请务必确保已经正确安装了 PHP.打开命令行窗口并执行 php -v 查看是否正确输出版本号. 打 ...

  4. 运用Unity实现AOP拦截器[结合异常记录实例]

      本篇文章将通过Unity实现Aop异常记录功能:有关Unity依赖注入可以看前两篇文章: 1:运用Unity实现依赖注入[结合简单三层实例] 2:运用Unity实现依赖注入[有参构造注入] 另早期 ...

  5. IT痴汉的工作现状36-做好准备再上路

    软件开发流程管理是採用瀑布式好还是敏捷好? 如今非常多人会选择敏捷.由于眼下的现状是需求的变化是一天一个样,这是当前(移动)互联网的飞速发展所带来的.当我们仍採用原始的先做全盘的计划.然后在按部就班的 ...

  6. iOS百度地图

    一.百度地图sdk具体使用过程,參考以下的博客(我感觉非常具体.并且有问题能够找楼主.他会给解答,感谢好心人-): 怎样使用百度地图sdk,及相关demo下载 上述博客给的demo,是真机执行的(百度 ...

  7. Python-常用字符串转换实例

    当字符串是:'\u4e2d\u56fd' >>>s=['\u4e2d\u56fd','\u6e05\u534e\u5927\u5b66']>>>str=s[0].d ...

  8. Python-装饰器进阶

    基本概念 具体概念请先看之前的文章 理解装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理, Web权限校验, Cache等. 很有名的例子,就 ...

  9. 将本地web项目发布到ubuntu上并运行 第一个本地的.net core2.0项目

    前置条件 ubuntu已安装dotnet 发布版本dotnet与发布机一致 这里用的是vm 所以直接把本地web项目拷贝到vm中运行的ubuntu系统中 web站点需要将 webapplication ...

  10. centos 7 生成文件名乱码的问题如何解决?

    在应用脚本生成文件时,发现生成的文件名称出现乱码(似麻将一样).刚开始找来找去,以为是复制粘贴的原因,复制时复制了特殊字符导致的,结果修改源文件后发现生成的文件名还是乱码.后来在执行脚本时,提示&qu ...