在Xamarin Android应用中下载并使用Montserrat字体的方法咨询
没问题,我来一步步教你在Xamarin Android项目里用上Montserrat字体~
在Xamarin Android项目中使用Montserrat字体的完整步骤
1. 准备字体文件并配置项目
- 先把你从Google Fonts下载好的Montserrat字体族解压,挑选你需要的字重文件(比如
Montserrat-Regular.ttf、Montserrat-Bold.ttf这类)。 - 打开你的Xamarin Android项目,右键项目 → 添加 → 新建文件夹,命名为
Assets(如果已经有这个文件夹就跳过)。 - 把选中的ttf文件复制到
Assets文件夹里,然后逐个选中这些文件,在右侧属性面板里把Build Action设置为AndroidAsset——这一步很重要,不然编译时字体不会被打包进App里。
2. 给控件设置字体的两种方式
方式一:单个控件动态设置
如果只是想给某个特定控件(比如TextView、Button)用Montserrat,直接在代码里设置就行:
// 找到目标控件 var myTextView = FindViewById<TextView>(Resource.Id.my_text_view); // 从Assets加载字体 Typeface montserratRegular = Typeface.CreateFromAsset(Assets, "Montserrat-Regular.ttf"); // 给控件设置字体 myTextView.Typeface = montserratRegular;
⚠️ 注意:这里的文件名要和Assets里的完全一致,包括大小写,不然会找不到字体文件哦。
方式二:全局设置默认字体(推荐)
要是想让整个App的所有文本控件都用Montserrat,不用一个个手动设置,就用全局替换的方法:
- 新建一个自定义Application类:
[Application] public class MyCustomApp : Application { public MyCustomApp(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer) { } public override void OnCreate() { base.OnCreate(); // 替换系统默认的几种字体类型为Montserrat ReplaceSystemFont("DEFAULT", "Montserrat-Regular.ttf"); ReplaceSystemFont("MONOSPACE", "Montserrat-Regular.ttf"); ReplaceSystemFont("SERIF", "Montserrat-Regular.ttf"); ReplaceSystemFont("SANS_SERIF", "Montserrat-Regular.ttf"); } private void ReplaceSystemFont(string systemFontName, string customFontPath) { Typeface customFont = Typeface.CreateFromAsset(Assets, customFontPath); // 通过反射替换系统默认字体 Field defaultFontField = typeof(Typeface).GetField(systemFontName, BindingFlags.Static | BindingFlags.Public); defaultFontField.SetValue(null, customFont); } }
- 打开
AndroidManifest.xml,在<application>标签里指定这个自定义Application:
<application android:name=".MyCustomApp" android:label="MyApp" ...>
这样整个App的默认字体就变成Montserrat了,所有文本控件都会自动用上,省心很多~
3. 自定义控件实现XML布局直接引用(可选)
如果习惯在XML布局里直接指定字体,可以自定义一个继承自TextView的控件:
public class MontserratTextView : TextView { public MontserratTextView(Context context) : base(context) => InitFont(); public MontserratTextView(Context context, IAttributeSet attrs) : base(context, attrs) => InitFont(); public MontserratTextView(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr) => InitFont(); private void InitFont() { Typeface montserrat = Typeface.CreateFromAsset(Context.Assets, "Montserrat-Regular.ttf"); SetTypeface(montserrat, TypefaceStyle.Normal); } }
然后在布局XML里使用这个自定义控件(注意替换成你的项目命名空间):
<com.yourcompany.myapp.MontserratTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello Montserrat!" />
内容的提问来源于stack exchange,提问作者Konstantinos Evangelidis




