Android批量設置字體框架Calligraphy

最近在進行開發的時候,碰到了一個比較少見的需求,需要在切換APP風格/皮膚的時候將字體也切換掉,一般來說在移動客戶端是很少涉及字體的,但是作爲一個比較重要的需求還是將它實現了出來。

在網上查找相關解決方案的時候,大概會分爲幾種方法

1、自定義一個textview,在裏面設置字體

2、遍歷rootview,找到裏面每一個textview,設置字體,但是隻能設置textview而無法設置其他如Button等控件

3、利用反射修改Typeface,代碼見Github,(這種方式有時間可以深入研究下)

但是感覺還是比較麻煩,後來在github中查到了一個開源項目Calligraphy,使用起來十分簡便,代碼見Github

首先,在gradle文件中配置依賴路徑

dependencies {
    compile 'uk.co.chrisjenx:calligraphy:2.2.0'
}

然後在自定義的Application中的onCreate進行設置

@Override
public void onCreate() {
    super.onCreate();
    CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
                            .setDefaultFontPath("fonts/Roboto-RobotoRegular.ttf")
                            .setFontAttrId(R.attr.fontPath)
                            .build()
            );
    //....
}


之後在我們需要修改的Activity中,重寫attachBaseContext方法,此處建議創建一個父類Activity

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}

如果想設置某個TextView字體不同,可以直接在xml中設置fontpath

<TextView
    android:text="@string/hello_world"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    fontPath="fonts/Roboto-Bold.ttf"/>

在設置path的時候,本來以爲由於兼容性的問題有可能會找不到assets中的文件,還自己做了處理,後來發現多慮了,直接寫assets中的名稱即可。

至此,完成了Android應用字體的批量設置,Calligraphy還有很多的功能,詳情可以在Github中查看。

設置字體前:


設置字體後:


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