android 为自己的应用设置全局的字体

网上找了很多关于android全局设置应用字体的文章,但是都很麻烦,并且都是你抄我,我抄你的。

最后找到一篇写的还算不错的文章。http://ryanhoo.github.io/blog/2014/05/05/android-better-way-to-apply-custom-font/

但是里面的设置也比较复杂,我想要的是一处设置,处处生效(在某一个程序范围内)。

最后终于放我找到一个方式可以说是一处设置,处处生效。

代码如下:

public static void applyAppFont(Context context,String fontName) {
        try {
            final Field staticField = Typeface.class.getDeclaredField("SERIF");
            staticField.setAccessible(true);
            staticField.set(null,Typeface.createFromAsset(context.getAssets(), fontName));
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

这里请注意,大家都知道android有三种默认字体,分别是MONOSPACE,SERIF,SANS_SERIF。

上面代码里面这三种都可以用反射去修改。但是千万不要去反射修改DEFAULT。

然后:在style.xml里面。设置

    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:typeface">serif</item>
    </style>

最后在AndroidManifest.xml中使用这个主题就可以了。

这里我要说一下,serif里面的取值范围在(normal,serif,sans,monospace)后面3个都对应这Typeface中的静态字段,唯独normal不是对应Typeface中的DEFAULT,所以在反射和配置主题的时候一定要注意是否一致。

这里全局都是字体就完成了。是不是很方便?哈哈。

但是别高兴的太早了。

这个解决方案对android5.0貌似不行,似乎和5.0的主题有些不兼容。

如果主题对你不是很重要,可以使用旧主题。否则,你还是老老实实的要么一个一个改,要么递归去改

转载于:https://my.oschina.net/lin003/blog/711863

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值