在安卓操作系统下对于 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. Tomcat9 访问 Manager App

    1.介绍 在配置好Tomcat,我们往往需要访问Tomcat的Manager以及Host Manager.就需要在tomcat-users.xml中配置用户角色来实现.在地址栏输入:localhost ...

  2. 阅读源代码的重要性:如厨师选食材,耍厨具——在Eclipse中怎样查看Java、Android源代码

    首先,非常多人说,不会看jdk中的源代码就不叫学过Java.显然这是肯定的.打个例如:真正的厨师须要从食材的选取.加工.到最后的烹饪.装盘成型,甚至到最后给用户介绍食用方法等一整套流程走下来.而实际上 ...

  3. iOS项目开发实战——使用CoreLocation获取当前位置信息

    随着基于位置服务LBS和移动互联网的兴起,你的位置是越来越重要的一个信息.位置服务已经是当前的热门应用如微信.陌陌等社交应用的杀手锏.而在iOS开发中,苹果已经给我们提供了一个位置接口.CoreLoc ...

  4. unity3d格式的导出与加载

    http://blog.csdn.net/nateyang/article/details/7567831 1.导出.unity3d格式资源: http://game.ceeger.com/Scrip ...

  5. JavaScript 数组去重并统计重复元素出现的次数

    1.方法一 var arr = [1, 2, 3, 1, 2, 4]; function arrayCnt(arr) { var newArr = []; for(var i = 0; i < ...

  6. 默认权限umask

    什么是umask? 当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情.umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,um ...

  7. 英特尔 Android* 开发者指南上的对等应用

    简单介绍 当没有 Wi-Fi 訪问点或互联网訪问时,Android* 应用可能须要对等连接在两台或多台 Android* 设备之间建立连接. 比方,文件共享应用和多人游戏. 该功能可使用 NFC.蓝牙 ...

  8. MAC OS X 10.8 操作远程SSH服务器 + 无密码输入使用SSH服务器

    怀揣着为中小企业量身定做一整套开源软件解决方案的梦想开始了一个网站的搭建.http://www.osssme.org/ 使用命令行连接连接远程SSH服务器,root为我使用的远程服务器用户名,@后为I ...

  9. hybird和js交互退出

  10. 折叠表格思路及遇到的问题(tableView:viewForHeaderInSection:的section从1开始,不是从0开始)

    项目需要做了一个类似qq联系人的折叠表格,思路很简单:设置每个section的header,在header上显示组名等信息,然后根据折叠与否,设置每个section中cell的数量,如果折叠,则将之设 ...