Icon Font --Android圖標(biāo)也能輕松換膚

長(zhǎng)期以來,android碎片化極為嚴(yán)重,各種屏幕尺寸,分辨率,可以說是android開發(fā)者最為頭疼的問題,當(dāng)然,google也提出了各種適配方案,提供了各種分辨率的drawable文件夾,單位轉(zhuǎn)換(如dp,sp)等等,其實(shí)單位轉(zhuǎn)換都好說,圖片資源適配問題最為嚴(yán)重,如果弄好多套圖片資源,開發(fā)成本極高,apk大小也是個(gè)問題,實(shí)際上也很少這樣做,一般弄一套標(biāo)準(zhǔn)的圖片資源(xdpi)小手機(jī)上壓一下,大屏幕手機(jī)就稍微拉一下,導(dǎo)致做起來了的應(yīng)用看起來就像山寨的,但是也沒有更好的辦法,android5.0以后推出了vector Drawable不過因?yàn)榘姹鞠拗?,還不能用,目前開源社區(qū)也提供了往下兼容的庫,說真的,不好用,雖然使用矢量圖可以保證圖片不失真,換個(gè)顏色大小啥的,也是極其不靈活,還是會(huì)存在資源文件一堆堆的問題,Icon Font來了,android開發(fā)者的春天也就來了,不多說了,先來show兩張手機(jī)截圖。

未標(biāo)題-1.jpg

上面的圖片,我沒有使用用過一張圖標(biāo)資源,點(diǎn)擊換膚的按鈕,背景圖標(biāo)會(huì)隨著一起更改,如果大家感興趣,我接著往下嘮。

什么是Icon Font?

顧名思義,Icon(圖標(biāo)),F(xiàn)ont(字體),可兩者之間有什么關(guān)系呢,為啥叫這名,我開始也很疑惑,我在github上看到Android-Iconics這個(gè)庫,就將demo下載下來運(yùn)行,效果不錯(cuò)

screenshots1.jpg
按照一貫的思維,我看到這么多的圖標(biāo),apk安裝包卻不大,這引起了我的興趣,花了半個(gè)小時(shí)的時(shí)間,我卻找不到工程里面有一張圖片(除了啟動(dòng)圖標(biāo)),經(jīng)過一天的折騰,終于頓悟,圖標(biāo)就藏在字體文件里面,看著是個(gè)圖標(biāo),其實(shí)卻是個(gè)文字,這就是所謂的icon font。

使用Icon Font能給我們帶來哪些好處,又存在哪些弊端呢?

利:

  • 輕松解決圖標(biāo)資源適配問題,無論什么分辨率,圖片都是超級(jí)清晰的
  • 輕松改變顏色,大小,背景,圓角,輪廓各種屬性
  • apk大小,小,小,小
  • 可實(shí)現(xiàn)跨平臺(tái),一套資源,web,ios,android都能用
  • 資源維護(hù)很方便

弊:

  • 需要自定義svg圖片,并將其轉(zhuǎn)換為ttf文件,圖標(biāo)制作成本比較高

總而言之,我覺著利是大于弊的,做完之后是一勞永逸的,而且大多數(shù)圖標(biāo)都不需要我們自己做,網(wǎng)上都有現(xiàn)成的,比如Android-Iconics就提供了很多的圖片資源,想要的一般都能從里面找到。

怎么樣使用Icon Font?

fontello為我們提供了將svg圖標(biāo)轉(zhuǎn)換為字體文件的方式,至于svg圖片的制作(我也不會(huì),我們UI做的用的AI矢量圖工具);前面的環(huán)節(jié)我不管了,就講講我們android 程序員該做的事情,可以參照Android-Iconics提供的Demo和文檔,我就說一下關(guān)鍵的環(huán)節(jié)

  • 將ttf字體文件放在assets/fonts目錄下
  • 在你的Application里面注冊(cè)字體文件
@Override
    public void onCreate() {
        super.onCreate();
        Iconics.init(getApplicationContext());
        //register custom fonts like this (or also provide a font definition file)
        Iconics.registerFont(new CustomFont());
    }

  @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(IconicsContextWrapper.wrap(base));
    }
  • 重點(diǎn)看CustomFont類,在里面自定義你的Icon Font
 public static enum Icon implements IIcon {
        met_windy_rain_inv('\ue800'),
        met_snow_inv('\ue801'),
        met_snow_heavy_inv('\ue802'),
        met_hail_inv('\ue803'),
        met_clouds_inv('\ue804'),
        met_clouds_flash_inv('\ue805'),
        met_temperature('\ue806'),
        met_compass('\ue807'),
        met_na('\ue808'),
        met_celcius('\ue809'),
        met_fahrenheit('\ue80a'),
}
  • 最后在xml文件或代碼中調(diào)用定義的Icon Font
<ImageView
    android:layout_width="48dp"
    android:layout_height="48dp"
    app:ico_color="@color/md_red_A200"
    app:ico_icon="gmd-plus-circle"
    app:ico_size="48dp" />
new IconicsDrawable(this)
    .icon(FontAwesome.Icon.faw_android)
    .color(Color.RED)
    .sizeDp(24)

想要了解更多,閱讀原文檔或者代碼,也希望大家多多關(guān)注我,還是那句話,好東西必須要分享 o.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容