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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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学习笔记——全局改变应用的字体的主要内容,如果未能解决你的问题,请参考以下文章

Android :第一行安卓代码学习笔记之 全局获取 Context

Android项目实战(二十三):仿QQ设置App全局字体大小

Android学习笔记之,调用系统图库,添加自定义字体,屏幕截图

Android开发中如何为应用设置全局字体(第三方字体)?

Android 全局使用第三方字体

ANDROID_MARS学习笔记_S01_004dpidp(dip)及计算