亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述android学习笔记——全局改变应用的字体相关的知识,希望能为你提供帮助。
全局改变应用字体,三部曲:
第一部曲:声明一个类继承Application,重写onCreate()方法,清单文件(androidManifest.xml)中记得声明,代码如下:
@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学习笔记——全局改变应用的字体】
推荐阅读
- android studio我的习惯操作
- Android((本地可通信的前台远程)Service使用全面介绍)
- Android(远程服务Service(含AIDL & IPC讲解))
- Android 热修复方案分析
- 6.5 为什么Android用Java不用c实现()
- 6.3 Android Framework
- Android 对电话进行监听和挂断
- Android 登录界面与首页的设计
- android studio2.0 搭建Robotium环境--apk测试没有混淆只有签名