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>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章