android全域性修改字型

u010408060發表於2020-09-24

解決方案:

新增字型(.otf)到工程目錄assets下, 我的是在assets在新建了一個fonts包.

public class FontsUtils {

    /**
     * 設定自定義字型
     *
     * @param context
     * @param staticTypefaceFieldName 需要替換的系統字型樣式
     * @param fontAssetName           替換後的字型樣式
     */
    public static void setDefaultFont(Context context, String staticTypefaceFieldName, String fontAssetName) {
        // 根據路徑得到Typeface
        Typeface regular = Typeface.createFromAsset(context.getAssets(), fontAssetName);
        // 設定全域性字型樣式
        replaceFont(staticTypefaceFieldName, regular);
    }

    private static void replaceFont(String staticTypefaceFieldName, final Typeface newTypeface) {
        try {
            final Field staticField = Typeface.class.getDeclaredField(staticTypefaceFieldName);
            staticField.setAccessible(true);
            //替換系統字型樣式
            staticField.set(null, newTypeface);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

 

在Application裡面如下寫

@Override
public void onCreate() {
    super.onCreate();
    _application = this;
    ShenContext.set(this);
    FontsUtils.setDefaultFont(this, "SANS_SERIF", "fonts/ziti.otf");

}

 

在style檔案

  <style name="AppCompatNotitleTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
<!--        <item name="android:fontFamily">@font/ziti</item>-->
        <item name="android:typeface">sans</item>
    </style>

AndroidManifest.xml

<application
    android:theme="@style/AppCompatNotitleTheme"

 

 

 

 

 

相關文章