Android使用自己的字體庫讓你的APP更漂亮

Android系統是一個相對開放的系統,在我們平常開發的時候有時候會直接使用原生的控件更換下背景圖片。如果想讓我們的APP變得大漂亮,那麼我們會對UI進行深度定製,變成我們所希望的那樣。而一個APP的大漂亮除了UI的漂亮,很多時候字體也是影響大漂亮的因素之一。最近在開發中就有客戶的需求是數字要顯示爲那種液晶儀表盤的那種方正一些的樣子。
OMG,可難爲死我了。試了下Android自帶的字體庫,支持三種字體:Sans、serif、monospace,然後試了下。格勞資滴,看不出太明顯的變化嘛,更別說要滿足客戶的那個需求了。查閱資料後發現其實Android提供了支持使用自定義字體庫的功能,哇哦,還不快快走起。先上圖,有圖有真相。
在這裏插入圖片描述
嗯,看下面的文字就可以了哈。爲了有對比這裏我寫了6組不同的字體,前三組爲系統自帶分別爲Sans、serif、monospace,後面的我也不知道叫啥,隨便從網上下的。可以看到系統自帶的差別都不是很大,而且中文都是統一樣式。人家也說了,只支持英文和數字,爲啥?你問我爲啥?系統是人家做的,人家又不用中文,知道爲啥了不。可以看到我上面的按鈕是系統默認的,其實就是Sans。至於誰比誰更漂亮,這個還是看自己的喜好吧,畢竟人家還有喜歡那個年齡大點的呢,人家那叫韻味。
好了,看也看到效果了,那說下怎麼用唄。介紹兩種用法,1、在控件中針對設置Typeface 2、針對APP全局設置 但不管怎麼用,都得先引入自己的字體庫。
在assets下面建fonts,將字體庫放進去,其實直接放在assets下面也沒問題
第一種,局部使用。獲取到View之後調用tv4.setTypeface(Typeface.createFromAsset(getAssets(),"fonts/digital-7.ttf"));
如果你是直接放在assets下記得把路徑改正確就可以了,還有大小寫別搞錯了哈。
完了?是的,不信自己運行看效果撒。
第二中,全局配置使用。
首先在你的Application下,什麼,你說這個是系統的類,你自己繼承它撒。在你自己的Application類裏面寫如下代碼:

Typeface typeface = Typeface.createFromAsset(getAssets(),"fonts/hk.ttf");
        try {
            Field field = Typeface.class.getDeclaredField("MONOSPACE");
            field.setAccessible(true);
            field.set(null,typeface);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

記得用自己的Application哈,就是在AndroidManifest的application節點添加android:name=".App"的啦。然後就是在這個節點下面有個android:theme="@style/AppTheme",找到對應的樣式,添加monospace 就是要使用monospace這個字體庫。爲什麼是這個,你上面的代碼不是寫的MONOSPACE這個的嘛,不就是個偷樑換柱邁,然後就可以跑起來看哈了。來張效果圖:
在這裏插入圖片描述
看到沒得,全部都變了,賴死賴死。
你以爲就這麼的簡單?是的,其實就是這麼簡單。那爲什麼還有後面這段廢話呢?其實這裏想延申以下思維,比如我們的APP有在使用過程中更改字體的需求,也就是用戶已經進我們的APP了,Application已經初始化了怎麼能即時的更換字體?其實有兩種相對簡單些的方式,第一種用戶進行更換後暴力的把APP重新啓動一次,就是簡單粗暴了些,不過我喜歡。第二種是要對每個頁面的控件進行遍歷,其實能放文字進去的無非就那麼幾種嘛,對他們使用上面使用字體庫的第一種方案,對每個控件重新設定它的Typeface,這個相對要複雜點,而且還可能有自定義控件呢。不過至少可以作爲一種方案來選擇。
其實Android的字體一般情況是不太建議去換的,除非你能確定你拿到的字體庫一定是可以支持你的業務的,不然要是缺一些字體的話,那就可能從你希望的大漂亮變成醜醜醜了。
總結一句話:有的東西你不一定會用到,但有機會一定要去了解下,萬一哪天就用上了呢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章