如何从资产文件夹创建字体系列?

时间:2018-12-30 10:34:30

标签: android

我想将资产文件夹中的字体加载到我的字体资源xml文件中

事实上,我想要类似@asset的东西来加载它。

enter image description here

font-family1.xml

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
    <font
        android:fontStyle="normal"
        android:fontWeight="400"
        android:font="@asset/fontOne/a" />
    <font
        android:fontStyle="italic"
        android:fontWeight="400"
        android:font="@asset/fontOne/a_italic" />
</font-family>

3 个答案:

答案 0 :(得分:2)

您需要将.ttf个文件放在资产文件夹的子文件夹中,然后才能加载它们,但我建议您使用Calligraphy,因为它会使一切变得更加轻松和整洁。

答案 1 :(得分:1)

如果要将字体设置为所有文本,请使用caligraphy库。 而且,如果要将字体设置为特定文本,请改用TypeFace

答案 2 :(得分:1)

您可以构建自己的字体类

final class FontsOverride {

    static void setDefaultFont(Context context,
                               String staticTypefaceFieldName, String fontAssetName) {
        final Typeface regular = Typeface.createFromAsset(context.getAssets(),
                fontAssetName);
        replaceFont(staticTypefaceFieldName, regular);
    }

    private 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();
        }
    }
}

并在您的Application Class

 @Override
    public void onCreate() {
        super.onCreate();

        FontsOverride.setDefaultFont(this, "SERIF", "fontOne/a.ttf");
    }

展现您的风格

    <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="android:textColorHint">@color/main_color</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:typeface">serif</item>
</style>