android学习笔记——全局改变应用的字体

亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述android学习笔记——全局改变应用的字体相关的知识,希望能为你提供帮助。
全局改变应用字体,三部曲:
第一部曲:声明一个类继承Application,重写onCreate()方法,清单文件(androidManifest.xml)中记得声明,代码如下:


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

第二部曲:声明一个方法,代码如下:
import  java.lang.reflect.Field; import  android.content.Context; import  android.graphics.Typeface; public  final  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(); } } }

第三部曲:主题风格中必须设置,否则不生效
  < style  name="AppTheme"  parent="AppBaseTheme">                   < item  name="android:typeface"> monospace< /item>         < /style>

【android学习笔记——全局改变应用的字体】



    推荐阅读