本文介紹的內(nèi)容對應(yīng)的Github項目地址:IconFontApp
上一節(jié)提到讼稚,如果項目中很多自定義的圖標叽掘,或者是各種不同來源的圖標飒货,我們可以通過對Iconify進行擴展來實現(xiàn)感凤,但是在擴展之前我們需要制作自己的圖標字體文件丸相,那么圖標字體文件該如何制作呢?這個可以試試Fontello竟秫、Icomoon或者IconFont吧娃惯!
(制作圖標字體的方法有很多,可以參考這里肥败,本文主要介紹的是如何快速利用已有的圖標制作字體文件然后在應(yīng)用中使用)
1.Fontello: icon font generator
Fontello網(wǎng)址:http://fontello.com/
Github地址:https://github.com/fontello/fontello
Fontello是個圖標字體生成器趾浅,通過它可以把一些圖標作成字體放到自己的項目中。在Fontello主頁上可以訪問大量專業(yè)級的開源圖標馒稍,并支持添加自定義的圖標(SVG格式)潮孽,而且可以在網(wǎng)站上選擇不同來源的圖標合并到單個字體文件中。此外筷黔,它還可以自定義每個圖標的名稱以及對應(yīng)的Unicode碼往史,一切配置好了之后可以將圖標字體下載下來放到項目中使用。如下圖所示佛舱,我添加了兩個Custom Icons椎例,從Fontelico中選了6個圖標,從Font Awesome中選了3個圖標等请祖,最終導(dǎo)出得到的圖標字體文件就會包含這些我需要的圖標订歪。
自定義圖標名稱和對應(yīng)的Unicode:在頁面頂部的配置中可以選擇設(shè)置圖標名稱的前綴,例如fe-
下載之后得到一個zip文件肆捕,解壓之后打開demo.html
可以看到該圖標字體中的所有圖標的名稱和對應(yīng)的Unicode
同時刷晋,在解壓后的font
文件夾中有我們需要的ttf字體文件fontello.ttf
,下面介紹下詳細的擴展實現(xiàn)步驟慎陵。
(1)新建一個Android Studio項目眼虱,在app
中添加對Iconify的依賴
compile 'com.joanzapata.iconify:android-iconify:2.2.2'
(2)新建assets
文件夾,并將字體文件fontello.ttf
拷貝到文件夾下
(3)新建FontelloModule
類席纽,實現(xiàn)IconFontDescriptor
接口捏悬,內(nèi)容如下:
public class FontelloModule implements IconFontDescriptor {
@Override
public String ttfFileName() {
return "fontello.ttf";
}
@Override
public Icon[] characters() {
return FontelloIcons.values();
}
}
(4)新建FontelloIcons
枚舉,實現(xiàn)Icon
接口润梯,內(nèi)容如下:
public enum FontelloIcons implements Icon {
fe_spin1('\uE800'),
fe_spin2('\uE801'),
fe_spin3('\uE802'),
fe_spin4('\uE803'),
fe_spin5('\uE804'),
fe_github('\uE816');//注:這里我并沒有把所有的圖標都加上
char character;
FontelloIcons(char character) {
this.character = character;
}
@Override
public String key() {
return name().replace('_', '-');
}
@Override
public char character() {
return character;
}
}
(5)測試:在activity_main.xml
布局文件中添加一個IconTextView
<com.joanzapata.iconify.widget.IconTextView
android:id="@+id/iconTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:text="{fe-github} {fe-spin1 spin} {fe-spin2 spin} {fe-spin3 spin} {fe-spin4 spin} {fe-spin5 spin}"
android:textSize="20sp"
android:textColor="@android:color/black"/>
然后在MainActivity
的onCreate
方法最后添加初始化操作
Iconify.with(new FontelloModule());
運行應(yīng)用看到效果見文章末尾的截圖过牙,圖標可以設(shè)置為旋轉(zhuǎn)效果的喲,有點炫胺拿寇钉!
2.IcoMoon
IcoMoon網(wǎng)址:https://icomoon.io/app/
IcoMoon和Fontello一樣,既可以添加自己的圖標舶赔,又可以從其他的圖標庫中選擇圖片扫倡,而且也支持設(shè)置圖標的名稱和Unicode,最終還能導(dǎo)出得到圖標字體文件顿痪。IcoMoon導(dǎo)出得到的zip文件和Fontello導(dǎo)出的結(jié)果類似镊辕,使用它的ttf文件對Iconify進行擴展的方式也一樣油够。
3.IconFont
IconFont網(wǎng)址:http://www.iconfont.cn/
IconFont可是中文的圖標字體制作網(wǎng)站喲!該網(wǎng)站是阿里的UED團隊做的吧征懈,在該網(wǎng)站可以方便地管理圖標和制作圖標字體文件石咬。網(wǎng)站的幫助中Android端應(yīng)用教程介紹了如何使用下載得到的IconFont,這個比較簡單卖哎。但是鬼悠,需要注意的是,下載下來的demo.html
中看到的圖標對應(yīng)的編碼用的是UTF-8
表示的亏娜,并不是Unicode
編碼焕窝。此外,TextView的setText方法在使用的時候维贺,如果傳遞的參數(shù)是R.string.xxx
的形式的話它掂,最終顯示的時候?qū)?yīng)的字符串會自動轉(zhuǎn)成Unicode編碼;但是如果傳遞的參數(shù)是某個字符串的話溯泣,該字符串默認會被視為Unicode編碼虐秋,也就是說如果它原來不是Unicode編碼這個時候顯示就會出現(xiàn)異常!
看下下面的代碼就清楚了垃沦,下面顯示了4中不同的調(diào)用方式客给,并給出了不同方式下的顯示結(jié)果
關(guān)于如何將UTF-8編碼的形式改成Unicode編碼的形式可以參考其他的文檔,但是這里的轉(zhuǎn)換比較簡單肢簿,只要抽取出其中的16位表示形式就行了靶剑,例如UTF-8編碼的
對應(yīng)的Unicode編碼就是\ue601
,其中的16位表示形式是e601
池充,其他的同理桩引。
項目IconFontApp運行起來的效果如下圖所示: