博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 编程下字库的使用
阅读量:5041 次
发布时间:2019-06-12

本文共 2582 字,大约阅读时间需要 8 分钟。

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

转载于:https://www.cnblogs.com/sunzn/archive/2013/01/22/2871521.html

你可能感兴趣的文章
Jmeter之检查点
查看>>
Xilium.CefGlue怎么使用Js调用C#方法
查看>>
剖析servlet injection及源码分析.
查看>>
SAP Dependency 相关性
查看>>
Linux 内存清理
查看>>
アプリ:old basement -地下倉庫からの脱出-脱出ゲーム 攻略
查看>>
Ubuntu的人性化配置
查看>>
POJ-2947 Widget Factory 高斯消元
查看>>
struts2(一)
查看>>
Dynamic 动态类型 和双问号??的使用
查看>>
ExtJs七(ExtJs Mvc创建ViewPort)
查看>>
如何用div实现textarea
查看>>
tomcat设置指定jdk版本
查看>>
洛咕 P4491 [HAOI2018]染色
查看>>
ZJOI2019 线段树
查看>>
继承与多态 课后习题
查看>>
Redis 数据类型
查看>>
sqlserver时间函数
查看>>
ASP.NET Aries 高级开发教程:Excel导入之代码编写(番外篇)
查看>>
数据结构与算法JS实现
查看>>