覆盖字体的常用代码没有反映出来

时间:2017-07-13 12:29:17

标签: android

 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) {
        e.printStackTrace();
    }
}

这是我在片段中覆盖字体的常用代码。我在我的片段中调用了这个函数但是没有得到反映我的字体设置为默认值。我不知道为什么会这样。 有人有解决方案吗?

2 个答案:

答案 0 :(得分:0)

您无法为一个片段或活动设置字体,因此您需要为每个字段或应用程序设置字体。

答案 1 :(得分:0)

您可以创建一个类来应用这样的字体

receiveTimeout(httpServer)
    .timeout(5000);

并使用文件的完整路径在xml中使用此类

public class SolomonTextView extends TextView {

    public SolomonTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public SolomonTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public SolomonTextView(Context context) {
        super(context);
        init();
    }

    private void init() {
        if (!isInEditMode()) {
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(),
                    "Solomon Sans.otf"); //setting font
            setTypeface(tf);
        }
    }
}