我想要实现的是将style
属性添加到我的axml
文件中,并使用从Asset
加载的自定义字体。
我知道我可以加载这样的内置字体(style.xml
):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CodeFont" parent="@android:style/TextAppearance.Medium">
<item name="android:typeface">monospace</item>
</style>
</resources>
并使用它(Main.axml
):
<TextView
style="@style/CodeFont"
local:MvxBind="Text Hello" />
我知道我也可以创建MyCustomTextView
扩展TextView
并按SetTypeface
方法设置字体,但我想在style
属性中使用自定义字体。
类似于:
<resources>
<style name="CodeFont" parent="@android:style/TextAppearance.Medium">
<item name="android:typeface">MyCustomFontLoadedFromAsset</item>
</style>
</resources>
是否可能(以及如何做)?
答案 0 :(得分:9)
没有办法直接开箱即用。有一个名为Calligraphy的图书馆,可以让你这样做。它适用于API 7 +
我也看到过使用反射覆盖serif / sans的技巧,以便您可以在styles.xml
:Is it possible to set a custom font for entire of application?中定义这些技巧,但我建议采用第一种方法。
答案 1 :(得分:-1)
public class MyApplication extends Application {
private Typeface normalFont;
private Typeface boldFont;
...
/**
* Fonts
*/
public void setTypeface(TextView textView) {
if(textView != null) {
if(textView.getTypeface() != null && textView.getTypeface().isBold()) {
textView.setTypeface(getBoldFont());
} else {
textView.setTypeface(getNormalFont());
}
}
}
private Typeface getNormalFont() {
if(normalFont == null) {
normalFont = Typeface.createFromAsset(getAssets(),"fonts/my_font.ttf");
}
return this.normalFont;
}
private Typeface getBoldFont() {
if(boldFont == null) {
boldFont = Typeface.createFromAsset(getAssets(),"fonts/my_font_bold.ttf");
}
return this.boldFont;
}
}
答案 2 :(得分:-3)
String fontPath = "PT_Sans-Narrow-Web-Regular.ttf";
holder.desc = (TextView) row.findViewById(R.id.msgdesc);
// Loading Font Face
Typeface tf = Typeface.createFromAsset(
row.getContext().getAssets(), fontPath);
// Applying font
holder.desc.setTypeface(tf);
答案 3 :(得分:-4)
info1 = (TextView) findViewById(R.id.textView1);
Typeface font = Typeface.createFromAsset(this.getAssets(),
"fonts/KeepCalm-Medium.ttf");
info1.setTypeface(font);
info1.setTextColor(Color.parseColor("#FFFFFF"));