Android加载自定义字体出错,盘点Android使用自定义字体遇到的坑
最近项目中涉及到一些其他平面的汉字或者别的文字的展示,具体的细节就不提了,那么怎么使用这些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使用自定义字体遇到的坑相关推荐
- android加载efi分区,高通Android UEFI XBL 代码流程分析
高通Android UEFI XBL 代码流程分析 背景 之前学习的lk阶段点亮LCD的流程算是比较经典,但是高通已经推出了很多种基于UEFI方案的启动架构. 所以需要对这块比较新的技术进行学习.在学 ...
- android加载长图宽度自适应,Android使用Glide加载超长图
app项目开发过程中,大都有查看图片详情的功能模块.实现的方式一般都是通过viewpager+photoView+Glide的方式.这种方式下,如果碰到加载超长图,比如说高清版的清明上河图/世界地图, ...
- android 加载json停顿,java – 在Android上解析~1 MB JSON非常慢
我的资产文件夹中存储了大约1MB的 JSON文件,每次运行时我都需要在我的应用程序中加载.我发现内置的JSON解析器(org.json)非常缓慢地解析文件,但是一旦解析了,我就可以非常快速地访问和操作 ...
- 一招解决Android 加载高清大图
本文转自:http://blog.csdn.net/lmj623565791/article/details/49300989 最近花时间详细拜读了郭神博客的图片加载系列,感觉收获不少.正好想将自己之 ...
- Android加载长图滑动显示
1.记录下学到的Android加载长图写法以备后用 首先准备一张长图.这里把图片先放到项目的 assets文件夹下:命名为big.png 然后开始自定义显示长图的view :BigView impor ...
- Android 加载超大长图及原理
Android 加载超大长图及原理 我们在开发中偶尔会遇到加载超大长图,类似于微信n多页聊天记录截图加载.但这类图片一般都会很大,几兆.十几兆.甚至几十兆,很容易造成内存溢出,今天笔者给大家提供一个可 ...
- Android加载SVG实现交互式地图绘制
Android加载SVG实现交互式地图绘制 Android加载SVG实现交互式地图绘制 效果图 实现思路 准备工作 具体实现 效果图 实现思路 下载SVG文件 将svg资源转换成相应的java代码 解 ...
- Android 加载页 完美隐藏系统状态栏和导航栏 适用刘海屏
适用版本(因为一些方法被高版本弃用或淘汰,可能效果不太好,以下版本验证可用): android {compileSdkVersion 28buildToolsVersion '28.0.0'defau ...
- 关于 android 加载 res 图片 out of memory 问题 解决 同样适用于 sd卡图片
2019独角兽企业重金招聘Python工程师标准>>> 发现android 加载res图片如果过多也会崩溃 android 也是使用 Bitmap bm = BitmapFacto ...
- Android加载大图片OOM异常解决
Android加载大图片OOM异常解决 参考文章: (1)Android加载大图片OOM异常解决 (2)https://www.cnblogs.com/jevan/archive/2012/07/05 ...
最新文章
- numpy库学习 向量 矩阵 均为有两个[[ ,而秩为1的数组只有一个[ np.array([[]]) 与np.array([])的区别
- CreateProcess failed: The system cannot find the file specified.
- 为什么java需要静态类_为什么Java主要方法是静态的?
- UVa LA 4253 UVa 1421 Archery 枚举,状态削减,oj错误题目 难度: 1
- js基本数据类型和复杂数据类型的区别
- python输入input数组_python怎么输入数组
- node.js go java_ABAP,Java, nodejs和go语言的web server编程
- 适用于大型项目的TinyCircuits,硬件需求较小
- img pdf 展示_pdf.js实现图片在线预览
- 递归的使用不当 导致 压缩文件不能压缩二级目录
- sql语句中单引号嵌套问题
- 接口测试用例设计实践(含详细实例)
- IOS开发之逆向分析
- matlab中mov是什么意思,PLC编程中MOV是什么意思
- Chosen.1 翁克 回忆 怪事
- 签章服务器系统,优泰科技首页_电子签名 手写批注 电子印章 全文批注
- 大数据让电商实现精准营销
- Apache新晋董事姜宁:从Apache Member到Apache董事,他花了11年
- java比较炫的登录界面_教你写一个炫酷的Material Design 风格的登录和注册页面
- mfc程序退出时删除托盘图标
热门文章
- 夜弦网页游戏专用浏览器(支持最小化隐藏后台多开挂机)
- C语言 基础40道编程题库汇总
- java web导出excel表格,java 网页导出excel表格数据-java 将页面内容写入excel文件中并可以将其下载到......
- matlab 三维 作图 坐标轴_matlab三维作图教程
- Windows 内核驱动开发环境 VS2019+WDK11
- 甘肃暴雨强度公式_我国若干城暴雨强度公式列表.doc
- 《数据挖掘概念与技术》读书笔记(一)
- java基础技巧_java基础中的技巧
- max(X,Y),min(X,Y)的期望求解
- UML教程6:状态图