Xamarin 如何在Android自定义渲染器中设置字体样式

Xamarin 如何在Android自定义渲染器中设置字体样式,xamarin,xamarin.forms,Xamarin,Xamarin.forms,建议我使用以下代码: 对于Android: [程序集:ExportRenderer(typeof(CustomLabel)、typeof(CustomLabelRenderer))] 名称空间FontRenderer.Droid { 公共类CustomLabelRenderer:LabelRenderer { 公共CustomLabelRenderer(上下文) :基本(上下文) { } 受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e) {

建议我使用以下代码:

对于Android:

[程序集:ExportRenderer(typeof(CustomLabel)、typeof(CustomLabelRenderer))]
名称空间FontRenderer.Droid
{
公共类CustomLabelRenderer:LabelRenderer
{
公共CustomLabelRenderer(上下文)
:基本(上下文)
{
}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
内丰氏家族;
开关(元素FontFamilyType)
{
案例FontFamilyType.Light:
fontFamilyResId=Resource.Style.FontRobotoLight;
打破
案例FontFamilyType.常规:
fontFamilyResId=Resource.Style.FontRobotoRegular;
打破
案例FontFamilyType.中等:
fontFamilyResId=Resource.Style.FontRobotoMedium;
打破
违约:
抛出新ArgumentOutOfRangeException();
}
对照组:SetTextAppearance(fontFamilyResId);
}
}
}
当然,对于Android,您还需要另外两种样式(对于light和regular系列)。在
styles.xml
中添加以下两种样式:


无衬线灯
无衬线
我想知道的是。如何在不需要创建XAML样式的情况下实现这一点

是否有一种方法可以将其编码到自定义渲染器中。所以我需要做的就是指定


FontFamilyType=“san serif light”

如果将字体放在assest文件夹中,可以像下面的自定义渲染器代码一样设置字体<代码>字体样式提供
普通
粗体
斜体
粗体
样式

[assembly: ExportRenderer(typeof(Label), typeof(MyCustomLabel))]
namespace App6.Droid
{
    class MyCustomLabel : LabelRenderer
    {
        public MyCustomLabel(Context context) : base(context)
        {
        }
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);

            Typeface tf=Typeface.CreateFromAsset(Android.App.Application.Context.Assets, "Modak-Regular.ttf");
            Control.SetTypeface(tf,TypefaceStyle.Bold);
        }
    }
}

您好,您提到将字体放在资产文件夹中。但是Android已经有很多系统字体,所以我只想使用与Android相匹配的字体。我所需要的只是找到一些方法来访问这里的字体:fontFamilyResId=您想使用来自本机Android系统的字体吗?像这样
Typeface tf=Typeface.Create(Typeface.SansSerif,TypefaceStyle.Bold);Control.SetTypeface(tf,typestyle.Normal)是的,我想知道的是,如何在Android自定义渲染器中实现这一点。谢谢,我将很快检查您的解决方案
[assembly: ExportRenderer(typeof(Label), typeof(MyCustomLabel))]
namespace App6.Droid
{
    class MyCustomLabel : LabelRenderer
    {
        public MyCustomLabel(Context context) : base(context)
        {
        }
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);

           Typeface tf=Typeface.Create(Typeface.SansSerif, TypefaceStyle.Bold);             
           Control.SetTypeface(tf,TypefaceStyle.Bold);
        }
    }
}