在此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
,可以解决编译错误!
这里缺少什么?
答案 0 :(得分:0)
创建字体系列
字体家族是一组字体文件以及其样式和粗细详细信息。在Android中,您可以将新的字体系列创建为XML资源并作为一个整体进行访问,而不必将每种样式和粗细引用为单独的资源。这样,系统可以根据您要使用的文本样式选择正确的字体。
要创建字体系列,请在Android Studio中执行以下步骤:
将每个字体文件,样式和粗细属性包含在元素中。以下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字体文件放在资产文件夹中