最近项目中涉及到一些其他平面的汉字或者别的文字的展示,具体的细节就不提了,那么怎么使用这些TTF字体文件呢,就需要借助于TypeFace这个类来实现。

使用字体文件

我们可以有两种方式使用字体文件:

①一般字体文件都放在项目Assets目录下,使用的时候:

Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/xxxx.ttf");

textView.setTypeface(typeface);

②如果我们全部把字体文件放在Assets目录下,就会使打包的APK文件比较大,那么就需要我们去服务端下载需要的字体文件到手机的SD卡中:

Typeface typeface = Typeface.createFromFile(Environment.getExternalStorageDirectory() + "/xxxx.ttf");

textView.setTypeface(typeface);

需要注意的问题:

在使用的时候可能会报错:java.lang.RuntimeException: native typeface cannot be made,一般有两种情况:

①字体路径错误:需要我们仔细检查路径,字体名字的拼写等;

②字体文件过大:这个对于Assets目录下的还好,在SD卡中如果字体文件过大,就会报这个异常。

如果想要了解Android底层是如果加载字体文件的,可以参考这篇文章:

Android 字体加载

还有就是如果有多处使用这个字体文件,如果在每次调用的时候都这样写,会造成每次执行的时候都会重新加载一次该字体,导致内存不断变大,造成内存泄漏。

解决方案:将加载的字体文件Typeface定义为一个常量,需要的时候拿来用就行了!

另外,这里也顺便提一下的就是,如果我们的项目已经开发完了,这时在下一个版本需要替换为另外的自定义的字体,这时该怎么做:下面这两篇文章可以提供一些参考:

Android -全自动将APP的字体替换系统包含的任意字体

Android 探究 LayoutInflater setFactory

加载不同的字体呈现一行字

上面说的都是使用一个字体文件,使得文字的字体都相同,那么回到文章开头说的,如果这一行字符串是不同平面,或者每一个字都需要不用的字体文件来呈现该如何解决呢?

这里先大致说下思路吧,后边再详细说如何实现!

首先得到每一个单字的字长,然后遍历整个字符串,将单字append到一个SpannableStringBuilder对象中,然后调用它的setSpan(Object what, int start, int end, int flags)方法,第一个参数需要我们需要借TypefaceSpan这个类来加载字体文件,第二,三个参数对应使用这个字体的开始索引和结束索引,这时就需要到最开始得到的单字字长了,最后调用TextView#setText()方法,传入该SpannableStringBuilder对象即可!

好了,先这样吧,后边再说具体的实现!

Android加载自定义字体出错,盘点Android使用自定义字体遇到的坑相关推荐

  1. android加载efi分区,高通Android UEFI XBL 代码流程分析

    高通Android UEFI XBL 代码流程分析 背景 之前学习的lk阶段点亮LCD的流程算是比较经典,但是高通已经推出了很多种基于UEFI方案的启动架构. 所以需要对这块比较新的技术进行学习.在学 ...

  2. android加载长图宽度自适应,Android使用Glide加载超长图

    app项目开发过程中,大都有查看图片详情的功能模块.实现的方式一般都是通过viewpager+photoView+Glide的方式.这种方式下,如果碰到加载超长图,比如说高清版的清明上河图/世界地图, ...

  3. android 加载json停顿,java – 在Android上解析~1 MB JSON非常慢

    我的资产文件夹中存储了大约1MB的 JSON文件,每次运行时我都需要在我的应用程序中加载.我发现内置的JSON解析器(org.json)非常缓慢地解析文件,但是一旦解析了,我就可以非常快速地访问和操作 ...

  4. 一招解决Android 加载高清大图

    本文转自:http://blog.csdn.net/lmj623565791/article/details/49300989 最近花时间详细拜读了郭神博客的图片加载系列,感觉收获不少.正好想将自己之 ...

  5. Android加载长图滑动显示

    1.记录下学到的Android加载长图写法以备后用 首先准备一张长图.这里把图片先放到项目的 assets文件夹下:命名为big.png 然后开始自定义显示长图的view :BigView impor ...

  6. Android 加载超大长图及原理

    Android 加载超大长图及原理 我们在开发中偶尔会遇到加载超大长图,类似于微信n多页聊天记录截图加载.但这类图片一般都会很大,几兆.十几兆.甚至几十兆,很容易造成内存溢出,今天笔者给大家提供一个可 ...

  7. Android加载SVG实现交互式地图绘制

    Android加载SVG实现交互式地图绘制 Android加载SVG实现交互式地图绘制 效果图 实现思路 准备工作 具体实现 效果图 实现思路 下载SVG文件 将svg资源转换成相应的java代码 解 ...

  8. Android 加载页 完美隐藏系统状态栏和导航栏 适用刘海屏

    适用版本(因为一些方法被高版本弃用或淘汰,可能效果不太好,以下版本验证可用): android {compileSdkVersion 28buildToolsVersion '28.0.0'defau ...

  9. 关于 android 加载 res 图片 out of memory 问题 解决 同样适用于 sd卡图片

    2019独角兽企业重金招聘Python工程师标准>>> 发现android 加载res图片如果过多也会崩溃 android 也是使用 Bitmap  bm = BitmapFacto ...

  10. Android加载大图片OOM异常解决

    Android加载大图片OOM异常解决 参考文章: (1)Android加载大图片OOM异常解决 (2)https://www.cnblogs.com/jevan/archive/2012/07/05 ...

最新文章

  1. numpy库学习 向量 矩阵 均为有两个[[ ,而秩为1的数组只有一个[ np.array([[]]) 与np.array([])的区别
  2. CreateProcess failed: The system cannot find the file specified.
  3. 为什么java需要静态类_为什么Java主要方法是静态的?
  4. UVa LA 4253 UVa 1421 Archery 枚举,状态削减,oj错误题目 难度: 1
  5. js基本数据类型和复杂数据类型的区别
  6. python输入input数组_python怎么输入数组
  7. node.js go java_ABAP,Java, nodejs和go语言的web server编程
  8. 适用于大型项目的TinyCircuits,硬件需求较小
  9. img pdf 展示_pdf.js实现图片在线预览
  10. 递归的使用不当 导致 压缩文件不能压缩二级目录
  11. sql语句中单引号嵌套问题
  12. 接口测试用例设计实践(含详细实例)
  13. IOS开发之逆向分析
  14. matlab中mov是什么意思,PLC编程中MOV是什么意思
  15. Chosen.1 翁克 回忆 怪事
  16. 签章服务器系统,优泰科技首页_电子签名 手写批注 电子印章 全文批注
  17. 大数据让电商实现精准营销
  18. Apache新晋董事姜宁:从Apache Member到Apache董事,他花了11年
  19. java比较炫的登录界面_教你写一个炫酷的Material Design 风格的登录和注册页面
  20. mfc程序退出时删除托盘图标

热门文章

  1. 夜弦网页游戏专用浏览器(支持最小化隐藏后台多开挂机)
  2. C语言 基础40道编程题库汇总
  3. java web导出excel表格,java 网页导出excel表格数据-java 将页面内容写入excel文件中并可以将其下载到......
  4. matlab 三维 作图 坐标轴_matlab三维作图教程
  5. Windows 内核驱动开发环境 VS2019+WDK11
  6. 甘肃暴雨强度公式_我国若干城暴雨强度公式列表.doc
  7. 《数据挖掘概念与技术》读书笔记(一)
  8. java基础技巧_java基础中的技巧
  9. max(X,Y),min(X,Y)的期望求解
  10. UML教程6:状态图