Android 编程下字库的使用

摘要:
在Android 2.2版中,Android对字体库的支持有限。自Android 2.3.3版以来,Android系统已经能够支持大多数字体库。这意味着,您使用字体库在SDK版本号为Android 2.2的平台上编写的代码只能在Android 2.3.3系统和更高版本中生效;如果你在Android 2.2系统上执行代码,你将看不到预期的效果,相反,它将是空白的。考虑执行环境:如果您的应用程序面向高版本执行环境,您可以考虑使用此方法。如果用户的执行环境是Android 2.2,则需要放弃此方法。

在安卓操作系统下对于 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 简体字-微软雅黑-常规。

Android 编程下字库的使用第1张Android 编程下字库的使用第2张

复制代码
1 packagecn.sunzn.fonts;
2 
3 importandroid.app.Activity;
4 importandroid.graphics.Typeface;
5 importandroid.os.Bundle;
6 importandroid.view.Menu;
7 importandroid.widget.TextView;
8 
9 public class MainActivity extendsActivity {
10 
11     privateTextView tv_title;
12     privateTextView tv_author;
13     privateTextView tv_line1;
14     privateTextView tv_line2;
15     privateTextView tv_line3;
16     privateTextView tv_line4;
17 
18     public voidonCreate(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 booleanonCreateOptionsMenu(Menu menu) {
47 getMenuInflater().inflate(R.menu.activity_main, menu);
48         return true;
49 }
50 
51 }
复制代码

最后,还须要补充说明一下:尽管採用这样的方式能够实现自己想要的显示效果。可是在採用这样的方法之前开发者还是须要考虑下性能消耗和执行环境以及自己 APP 的风格,然后再做出相应的选择。原因有下面几点:

  • 字库文件的大小:由于字库的尺寸少则几兆,多则几十兆。文件打包的时候对 *.ttf 格式的文件压缩率非常低,所以会无形中增大 APP 的体积。
  • 执行环境的考虑:假设你的应用面向的是高版本号的执行环境,能够考虑使用这样的方法,假设用户的执行环境是 Android 2.2 须要放弃该方法。
  • 应用风格的考虑:假设你的应用既面向高版本号执行环境。而且你的应用中统一使用指定的字体,能够考虑使用该方法;若是单单为了应用中的某几个字的显示效果就使用字库,则会得不偿失。

免责声明:文章转载自《Android 编程下字库的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇例7-1gulp入坑系列(1)——安装gulp下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ios 获取app版本号

let infoDictionary = Bundle.main.infoDictionary!let appversion = infoDictionary["CFBundleShortVersionString"] as! String   //获取app的版本号 let deviceId = UIDevice.current.identifierFo...

android结合Jenkins使用V2签名

今日客户对安卓apk进行代码扫描时发现漏洞,后经过研究解决办法为安卓V2签名。 解决办法:Jenkins只能用命令行去设置签名。 步骤1:ZipAlign zip对齐,因为APK包的本质是一个zip压缩文档,经过边界对齐方式优化能使包内未压缩的数据有序的排列,从而减少应用程序运行时的内存消耗 ,通过空间换时间的方式提高执行效率(zipalign后的apk...

教你实现语音识别(基于科大讯飞)

1),首先在官网下载相关jar包 2)自定义界面设计: R.layout.activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"...

Unity调用安卓Android的Toast

需求:在游戏中弹窗消息,调起安卓的Toast 项目中需要做Unity和安卓交互时,经常需要通过安卓Toast来做简单的输出,以便于测试。 方法一:Unity中,C#主导 //Unity调用安卓的土司 public static void MakeToast(stringinfo) { AndroidJavaClass unityPla...

android中的资源访问

一.android中的资源是在代码中使用的外部文件。图片,音频,动画和字符串等叫做android中的资源文件。 二.Android工程 资源类型布局表    与src源文件夹并列的两个文件夹assets和res用来保存资源文件。      1.assets文件夹中放原声文件如MP3文件,通过AssetManager类以二进制流的形式访问      2.re...

安卓开发之mqtt协议

首先物联网协议mqtt协议是基于tcp/ip协议的,使用了官方的mqttclient框架/**初始化mqttclient*/private void init() { try { //MQTT的连接设置 options = new MqttConnectOptions(); /...