Использовать пользовательский шрифт в атрибуте стиля
Чего я хочу добиться, так это добавить атрибут style
в мой файл axml
с пользовательским шрифтом, загруженным из Asset
.
Я знаю, что могу загрузить встроенный fontface вот так (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>
Возможно ли это (и как это сделать)?4 ответа:
Нет способа сделать это прямо из коробки. Есть библиотека под названием каллиграфия, которая позволит вам это сделать. Он будет работать на API 7+
Я также видел трюк, использующий отражение, чтобы переопределить serif/sans, чтобы вы могли определить их в своем
styles.xml
: Можно ли установить пользовательский шрифт для всего приложения?, хотя я бы рекомендовал первый подход.
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; } }