Iconify库重大更新,更好更强大

英文原文:Iconify just got a lot better

本文地址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0817/3312.html 转载注明出处。  

我真的不喜欢把时间浪费在琐碎的事情上,安卓app中的图标管理算是其中的一件事。图标其实就是图片,因此需要有针对ldpi, mdpi, hdpi, xhdpi, xxhdpi的合适尺寸,并且需要放在app的相应drawable目录。在需要改变它们颜色大小的时候,这点是非常烦人的。

这就是为什么两年以前,我制作了一个叫做Iconify的小库。其主要的想法是可以写类似这样的代码。

<IconTextView  
    android:text="Welcome {fa-smile-o} {fa-hand-peace-o} !"
    android:shadowColor="#22000000"
    android:shadowDx="0"
    android:shadowDy="5"
    android:shadowRadius="1"
    android:textSize="30sp"
    android:textColor="#2A9BDA"
    ... />

IconTextView可以替换text中所有{..}为适当的图标。图标会完全体现出 text: color, size, 和 shadow在文字上的行为。不管它有多大,图标绝不会变模糊。它基于FontAwesome,图标的key(fa-heart-o) 直接来自于FontAwesome的 keys

你可以在任何地方使用图标,TextView, Button 甚至 ImageView和 ToolBar 菜单 (使用一个 IconDrawable)。

不再需要处理图片了。

这是如何做到的呢?FontAwesome中的图标都不是图片,而是特殊字体的特殊字符。Iconify将这些字体应用到整个IconTextView,并且把{...}块替换成特殊的字符。

\\uf039 <- fa_align_justify 
\\uf036 <- fa_align_left
\\uf038 <- fa_align_right
\\uf270 <- fa_amazon
\\uf0f9 <- fa_ambulance
....

但是...

这个库当时有两个很大的限制。

  • 首先,如果FontAwesome没有你需要的图标,你就必须回到使用令人沮丧的图片上来。最终一个app同时存在两种显示图标的方法,或者在某些地方使用不恰当的图标。

  • 其次,你不能使用自定义字体。它会完全破坏了Iconify,因为Iconify依赖于TextView在FontAwesome下的字体(Typeface)。比如,我高度怀疑\uf0f9在Gotham字体下是否还像个救护车。

虽然有这些限制,Iconify在那两年还是非常流行,在Github上有1300多颗星星,尽管我没有怎么维护,有些issue也留在那里没有去管。Mike Penz主动提出成为一个贡献者并维护了一段时间。后来 Damien Villeneuve发送了一个pull请求,允许用户提供自己的字体。这也是我开发2.0版本的动机。

Iconify 2 Logo

Iconify v2看起来一样,但是提供了多得多的东西。

  • FontAwesome不再是唯一可用的字体了。在写这篇文章的时候,你可以选择多达8种图标字体来用,这些字体可以在最新的demo app中浏览。正统派的人将会非常高兴看到官方的Material Design图标集合也是其中之一。

Iconify Demo App

  • 你可以提供自己的图标字体。你只需实现带.ttf文件的IconFontDescriptor并且在key与特殊字符间做映射,把map传递给Iconify.addIconFontDescriptor()。

  • 现在,你可以对IconTextView自定义typeface却不会破坏任何东西!这意味着 Calligraphy 可以很好的和Iconify一起使用。Iconify不会再改变TextView的typeface,它使用Spannable 来做到只让有关的字符采用icon字体。因此,我们举个例子,在IconTextView上采用GoodDog 字体可以做到如下的效果:

custom typeface mixed with icon {fa-check}

  • 这个功能被要求了很多次了,现在你可以轻易实现对一个特定的图标设置颜色和大小,比如{fa-android 80%} {fa-android} {fa-android 50sp @color/color_accent} :

  • 对于那些熟悉FontAwesome的同学,可能还知道animated icons,它可以快速实现一个旋转的图标。现在Iconify上也可以做同样的事情,而且这也许也是V2版本的最大特色之一!只需使用spin关键词,比如{fa-cog spin},你就可以查看效果了。

总结

谢谢阅读!Iconify 2现在已经可以使用了,在Maven Central上也可以获取,我非常高兴能在社区分享它,也希望能收到一些有趣的反馈,帮助改进。

支持一个新的图标字体无需花费太多时间,所以如果你最喜欢的并不在其中,尽管open an issue