xamarin 在样式属性中使用自定义字体

ngynwnxp  于 2022-12-07  发布在  其他
关注(0)|答案(5)|浏览(203)

我想要实现的是将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>

这可能吗(以及如何做到)?

i2loujxw

i2loujxw1#

没有一种方法可以直接开箱即用。有一个名为Calligraphy的库可以让你这样做。它可以在API 7+上工作
我还看到了一个使用反射覆盖serif/sans的技巧,这样您就可以在styles.xml中定义它们:Is it possible to set a custom font for entire of application?,尽管我推荐第一种方法。

ht4b089n

ht4b089n2#

我知道这是一个老问题,但是现在您可以使用fontFamily属性来实现这一点(参见文档):

<style name="customfontstyle" parent="@android:style/TextAppearance.Small">
    <item name="android:fontFamily">@font/yourcustomfont</item>
</style>

显然,您需要事先定义fontFamily。要这样做,请参阅文档。

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
    <font
        app:fontStyle="normal"
        app:fontWeight="400"
        app:font="@font/yourcustomfont_regular" />
    <font
        app:fontStyle="italic"
        app:fontWeight="400"
        app:font="@font/yourcustomfont_italic" />
</font-family>
o8x7eapl

o8x7eapl3#

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;
    }
}
wyyhbhjk

wyyhbhjk4#

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);
soat7uwm

soat7uwm5#

info1 = (TextView) findViewById(R.id.textView1);
Typeface font = Typeface.createFromAsset(this.getAssets(),
            "fonts/KeepCalm-Medium.ttf");
info1.setTypeface(font);
info1.setTextColor(Color.parseColor("#FFFFFF"));

相关问题