无法在Android应用中更改默认字体

Sim*_*ash 5 java android android-layout

我正在尝试更改我的应用程序中的默认字体.但它不起作用.这些是我采取的步骤:

1)创建类TypefaceUtil.java

import android.content.Context;
import android.graphics.Typeface;
import android.util.Log;

import java.lang.reflect.Field;

public class TypefaceUtil {

public static void overrideFont(Context context, String defaultFontNameToOverride, String customFontFileNameInAssets) {
    try {
        final Typeface customFontTypeface = Typeface.createFromAsset(context.getAssets(), customFontFileNameInAssets);

        final Field defaultFontTypefaceField = Typeface.class.getDeclaredField(defaultFontNameToOverride);
        defaultFontTypefaceField.setAccessible(true);
        defaultFontTypefaceField.set(null, customFontTypeface);
    } catch (Exception e) {
        Log.e("CustomFontException", "Can not set custom font " + customFontFileNameInAssets + " instead of " + defaultFontNameToOverride);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

2)在扩展应用程序的类中:

public void onCreate() {

     super.onCreate();
     TypefaceUtil.overrideFont(getApplicationContext(), "MONOSPACE", "fonts/varelaround_regular.ttf");
 }
Run Code Online (Sandbox Code Playgroud)

3)在styles.xml中

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
     <item name="android:typeface">monospace</item>
 </style>
Run Code Online (Sandbox Code Playgroud)

仍然没有用.我错过了什么吗?

sid*_*_09 2

我曾经遇到过这个问题。我不太确定它为什么有效,但您可以尝试以下操作:代替“等宽”,尝试以下每一个:DEFAULT、SANS_SERIF、SERIF。它可能不适用于所有文本视图,例如 ListView 或 recyclerView 中的文本视图(很奇怪,对吧?)。但在这些情况下,我通过适配器以编程方式设置字体。抱歉无法解释原因。