icon字体库

来源:互联网 发布:编程入门看什么书 编辑:程序博客网 时间:2024/05/04 16:51

在Android项目开发中,图片可谓是必不可少的一部分,这时我们可能会去看许多图片的适配方案,例如,根据不同分辨率来提供多套图什么的…

这篇文章并不是去介绍如何去做图片的适配,而是介绍一个略屌的字体库,利用该字体库,我们可以用TextView的形式去显示图片,而且我们还可以用android:textSize随意改变图片的大小! 


听起来是不是有点小激动了,不要着急,因为它只是一个字体库,所以使用起来非常简单,在介绍它之前,我们先来介绍一种设置字体的绝佳方式。

在开始之前,我们先来看一张图。


如果你认为这上面的图片都是用ImageView去显示,那你就错了,这些全都是用TextView搞的,快快快,我们马上来介绍一下这个屌屌的东西吧。

1.全局设置字体
   

大家都知道,在android中,我们如果要更换字体,除了要引入我们需要的字体库外,还需要给我们的TextView一一去设置使用的字体,如何去设置呢?其实很简单。

textView.setTypeface(Typeface tf);

尽管就这么一行代码,但是,在我们项目中肯定会存在大量的TextView,难道我们要一个个的去动手设置吗?想想这也是一件很头疼的事,下面就介绍一种方便的方法,一行代码解决字体设置的问题。

在看代码之前,先来看看思路,其实思路很简单,

我们提供一个根布局,写一个方法去递归遍历整个根布局,如果发现是textView,则设置字体。

思路很简单,相信代码也很简单,就是一个递归方法。


定义了一个工具类,这个类提供两个静态方法,但是核心都是

public static final void injectFont(View rootView, Typeface tf)

这个方法中,首先我们去判断我们给的rootView是不是ViewGroup,如果是ViewGroup,则遍历他的所有子view,然后递归去调用这个方法,直到全部完成,如果发现某个view是TextView,则我们调用setTypeface方法来设置字体。

ok,从这个工具类中我们还可以看到,我们的字体是放在assets/fonts目录下的。

2.fontawesome的使用

好了好了,我们开始进入今天的主题,今天的主角就是fontawesome这个字体库,在开始使用之前,我们我们需要到

  • https://github.com/FortAwesome/Font-Awesome/

下载这个字体库。下载下来以后,你会看到有很多目录和文件,没关系,我们只需要一个文件-fontawesome-webfont.ttf,这个文件位于/fonts/目录下。将这个ttf文件copy到你项目的assets目录下,按照惯例或者说是共识,我们可能是将它放到assets/fonts这个目录下(注意,没有这个目录的话,创建它!)。

修改我们上面的工具类,将字体指定为我们新引入的字体库。

public class FontHelper {    public static final String FONTS_DIR = "fonts/";        public static final String DEF_FONT = FONTS_DIR + "fontawesome-webfont.ttf";}

ok, 准备工作都做好了,那我们就开始使用它吧,看我的xml布局文件,


除了第一个TextView的文本我们认识外,其他的我们一概不熟! 没关心,过一会,我会给出一个认识它们的方式。还需要注意的是,很多TextView我们给出了textSize或者textColor属性,不用想这些肯定去控制了我们需要显示的图片的大小和颜色! 

最后是在activity中使用字体库,正式利用了上面的工具类,所以我们的代码将会很简单。


仅仅一行代码,

FontHelper.injectFont(findViewById(android.R.id.content));

我们就完成了给所有TextView设置字体的工作,现在可以运行一下项目,再和文章刚开始的那张图做一下对比,看看我们给TextView设置的那些属性,是不是都生效了!

可是,现在我们又遇到了一个问题,我们怎么知道哪写文本代表了什么图片呢?下面给出一个网址,通过这个网址,大家可以看到实体文本和他对应的图片的一个对照表。

  •  http://fortawesome.github.io/Font-Awesome/cheatsheet/

哦,对了,不知道大家有没有发现,这里我们无意中解决了一个图片大小的问题,因为我们可以任意改变一个文本的大小,所以,就不需要提供多套图去适配不同的屏幕了。

ok, 就到这里吧,希望大家可以从这里找到自己喜欢或者适用自己的图标。

参考链接:

  • http://code.tutsplus.com/tutorials/how-to-use-fontawesome-in-an-android-app–cms-24167

源码下载:

  • http://download.csdn.net/detail/qibin0506/9131929


===========================================================================================================================


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该文。


0 0