查看原文
其他

Android IconFont全攻略

2016-09-18 张鸿洋 鸿洋

节日归来~~今天由我给大家先带来一篇文章~~


上周推送了一篇App优化攻略-用TextView显示图片,发现留言众多,留言基本分为3类:


1. 推荐一些自己的使用经验



2.对于字体库的大小的忧虑




3.对于如何设置字体的建议以及忧虑



那么本文主要围绕以上3个问题来解答了~~


1如何方便的使用
   

对于使用,最主要就是找到一些靠谱的素材站点了


  • http://www.iconfont.cn/

  • https://icomoon.io/app/#/select

  • https://github.com/mikepenz/Android-Iconics


我一般使用第一个站点较多,基本上可以搜索到需要的任何图标,非常方便,也支持颜色和大小的设置,比如我们搜索“聊天”:



如果你还在依赖反编译找图标,不如试试这个网站吧,单纯的下载还不要登录,非常方便。


其他的网站用法应该类似~~不赘述了~~


2字体库大小的忧虑
   
2.1 按需加载


一般情况下,一个字体库可能都是几M甚至几十M,所以大家本能的反应是,这种方式虽然方便好用,但是如果为了几个图标加载一个超大的字体库肯定是拒绝的。


其实不存在这样的问题的,因为字体库内的图标是可定制的,也就是说,我这个app用到了20个图标,我只需要将20个图标放到一个字体库即可,而不是加载完整的字体库。


下面看一下简单的数据比较:


项目中的一个小图(xhdpi下的ic_launcher.png)大小为5KB。


我随便打包了22个图标,做成的字体库的大小为:14kb / 22 = 0.64kb



而且这个字体库中的图,是可以随意放大不失真的~如果和大图对比,那么优势更加明显。


注:下载下来是一个压缩包,里面包含ttf,svg等,你可以打开demo.html作为字符与icon的对照表。


所以:该方案也是apk瘦身的可选手段之一。


2.2 自定义图标


还有种场景是,app内的图标部分是自己制作的,部分是网络上已有的,那么可以打成一个字体库么。


当然是可以的,比如你就可以依赖iconfont.com这个网站,自行上传svg图标,然后就可以自由选择了。


关于iconfont网站的用法参考:

  • http://www.iconfont.cn/help/platform.html

即可。


3如何方便的使用
   

上一篇文章中给出了一个递归遍历的方式去寻找TextView然后设置TypeFace,很多朋友都对其性能表示考虑,并表示可以通过自定义View的方式来替代该方案。


关于自定义View的方案,这里就不描述了,无非就是在构造方法中去设置TypeFace。


记得以前我写过探究 LayoutInflater setFactory一文,所以我们介绍跟LayoutInflaterFactory相关的一种做法。


我们编写一个自定义的LayoutInflaterFactory:



字体文件我放在assets目录下。


然后你可以在你的BaseActivity的onCreate中,调用如下代码:




注意一定要在super.onCreate前调用即可。


该方式可以在TextView及其子类对象创建完成时,就可以为其调用setTypeFace,非常的高效。

而对于字体库的加载,如果有需要,你甚至可以采用懒加载的方式,在SplashActivity中对其初始化。


如果你对setFactory不了解:可以详细阅读探究 LayoutInflater setFactory该文。


ok,节假日结束的第一天,结合上篇文章可以更好让大家对IconFont这种做法以及如何做好有个详尽的了解。


话说回来,对于公众号推送的文章,大家可以留言提意见、交流、问题等,我可以按照本篇文章的方式,为大家解惑~


觉得有用不妨赞一个~~




如果你有好的文章想和大家分享,欢迎投稿,直接向我投递文章链接即可。


欢迎长按下图->识别图中二维码或者扫一扫关注我的公众号:

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存