Android 导入外部字体的完美解决方案

第一步:在main文件夹下添加assets文件,下面再建fonts文件夹 然后引入外部字体。

第二步:建一个字体工具类。

 1 package com.xxxx.xxxx.fonts;
 2 
 3 import android.content.Context;
 4 import android.graphics.Typeface;
 5 
 6 import java.lang.reflect.Field;
 7 
 8 /**
 9  * 覆盖字体工具类
10  * Created by leict on 2017/2/28.
11  */
12 
13 public final class FontsOverride {
14     /**
15      * 设置默认字体
16      *
17      * @param context
18      * @param staticTypefaceFieldName
19      * @param fontAssetName
20      */
21     public static void setDefaultFont(Context context, String staticTypefaceFieldName, String fontAssetName) {
22         final Typeface regular = Typeface.createFromAsset(context.getAssets(), fontAssetName);
23         replaceFont(staticTypefaceFieldName, regular);
24     }
25 
26     /**
27      * 替换字体
28      *
29      * @param staticTypefaceFieldName
30      * @param newTypeface
31      */
32     protected static void replaceFont(String staticTypefaceFieldName, final Typeface newTypeface) {
33         try {
34             final Field staticField = Typeface.class.getDeclaredField(staticTypefaceFieldName);
35             staticField.setAccessible(true);
36             staticField.set(null, newTypeface);
37         } catch (NoSuchFieldException | IllegalAccessException e) {
38             e.printStackTrace();
39         }
40     }
41 }

第三步:在全局中初始化。

 1 package com.xxxx.xxxxx.application;
 2 
 3 import android.app.Application;
 4 
 5 import com.xxxx.travel.fonts.FontsOverride;
 6 
 7 /**
 8  * 全局变量
 9  * Created by leict on 2017/2/27.
10  */
11 
12 public class BaseApplication extends Application {
13     @Override
14     public void onCreate() {
15         super.onCreate();
16         FontsOverride.setDefaultFont(this, "MONOSPACE", "fonts/simkai.ttf");
17         FontsOverride.setDefaultFont(this, "SANS", "fonts/simhei.ttf");
18         FontsOverride.setDefaultFont(this, "SERIF", "fonts/simfang.ttf");
19     }
20 }

第四步:xml代码展示。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="世界你好"
                android:textSize="24sp"
                android:typeface="monospace" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="世界你好"
                android:textSize="24sp"
                android:typeface="sans" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="世界你好"
                android:textSize="24sp"
                android:typeface="serif" />

            <EditText
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:text="世界你好!"
                android:textSize="24sp"
                android:typeface="serif" />

            <EditText
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:text="世界你好!"
                android:textSize="24sp"
                android:typeface="sans" />

            <EditText
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:text="世界你好!"
                android:textSize="24sp"
                android:typeface="monospace" />

            <Button
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:text="提交"
                android:textSize="24sp"
                android:typeface="serif" />

            <Button
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:text="提交"
                android:textSize="24sp"
                android:typeface="sans" />

            <Button
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:text="提交"
                android:textSize="24sp"
                android:typeface="monospace" />
        </LinearLayout>
    </ScrollView>
</LinearLayout>

效果图:

posted @ 2017-02-28 11:46  逍遥散人95  阅读(2746)  评论(0编辑  收藏  举报