Android 全局设置应用字体样式

1、首先拷贝自定义字体文件.ttf到assets/fonts下,然后在自定义Application中设置改变字体。(asserts类似于res资源文件夹,目录级别一致)

2、创建一个类用于检测并替换应用字体

public class FontsOverride {
    public static void setDefaultFont(Context context,
                                      String staticTypefaceFieldName, String fontAssetName) {
        final Typeface regular = Typeface.createFromAsset(context.getAssets(),
                fontAssetName);
        replaceFont(staticTypefaceFieldName, regular);
    }

    protected 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();
        }
    }}
3、由于替换字体涉及整个应用的起始到结束

所以新建一个类继承Application,在onCreate(..)中调用写好的类FontsOverride的setDefaultFont方法

FontsOverride.setDefaultFont(this, "MONOSPACE", "fonts/SIMYOU.TTF");
现在介绍setDefaultFont方法参数,第一个上下文对象就熟悉了,第二个参数涉及到控件就会有一个属性android:typeface,设置字体的话
Android系统默认支持三种字体,分别为:sans, serif, monospace"
只要你为你要设置字体样式的控件设置android:typeface="monospace"这一属性,这时一旦检测到控件有这一属性,那么该控件的字体样式就会被替换成"第三个参数"字体文件样式;

注意:android:typeface这一属性不仅只针对可以设置文本android:text的控件,listview等一系列控件都可以;

总结:其中的内容也有参考一些博文,如果有更优或者该方法有问题请提示你的宝贵意见

你可能感兴趣的:(Android 全局设置应用字体样式)