对我的应用程序中的所有文本使用自定义字体

时间:2018-07-01 14:49:55

标签: android custom-font

在此procedure之后,我想将android应用中所有文本的字体设置为特定名称。这是一种非英语字体,因此我将其粘贴到app\src\main\assets\fonts中,并在styles.xml中写了以下内容

    <item name="android:fontFamily">@fonts/my.ttf</item>
    <item name="fontFamily">@fonts/my.ttf</item>

但是,在android studio中构建并运行该应用程序后(弹出模拟器),我看到的是默认字体,而不是我指定的字体。

顺便说一句,在该帖子中,它使用了@font。但是,如果我这样写,则会看到找不到字体的错误。通过更改@fonts,可以解决编译错误!

这里缺少什么?

2 个答案:

答案 0 :(得分:0)

创建字体系列

字体家族是一组字体文件以及其样式和粗细详细信​​息。在Android中,您可以将新的字体系列创建为XML资源并作为一个整体进行访问,而不必将每种样式和粗细引用为单独的资源。这样,系统可以根据您要使用的文本样式选择正确的字体。

要创建字体系列,请在Android Studio中执行以下步骤:

  1. 右键单击字体文件夹,然后转到“新建”>“字体资源文件”。出现“新资源文件”窗口。
  2. 输入文件名,然后单击“确定”。新的字体资源XML在编辑器中打开。
  3. 将每个字体文件,样式和粗细属性包含在元素中。以下XML说明了在字体资源XML中添加与字体相关的属性:

      **<font-family 
            <font
                android:fontStyle="normal"
                android:fontWeight="400"
                android:font="@font/lobster_regular" />
            <font
                android:fontStyle="italic"
                android:fontWeight="400"
                android:font="@font/lobster_italic" />
        </font-family>**
    

向TextView添加字体

要为TextView设置字体,请执行以下一项操作:

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/lobster"/>

Check this out获取完整的文档。

希望这对您有所帮助。

答案 1 :(得分:0)

如果要覆盖所有视图的字体,则可以使用以下方法:

public static Typeface 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);
        return customFontTypeface;
    } catch (NoSuchFieldException e) {
        Logger.e(e);
        return null;
    } catch (IllegalAccessException e) {
        Logger.e(e);
        return null;
    }
}

然后在Application类的onCreate()方法中像这样调用该方法:

TypefaceUtil.overrideFont(this,
            "SERIF",
            "fonts/CaviarDreams.ttf");

不要不要忘记将.ttf字体文件放在资产文件夹中