Как я могу установить стиль шрифта в пользовательском рендерере Android - PullRequest
0 голосов
/ 14 июля 2020

Мне предложили этот код:

Для Android:

[assembly: ExportRenderer(typeof(CustomLabel), typeof(CustomLabelRenderer))]
namespace FontRenderer.Droid
{
    public class CustomLabelRenderer : LabelRenderer
    {
        public CustomLabelRenderer(Context context)
            : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);

            int fontFamilyResId;

            switch (Element.FontFamilyType)
            {
                case FontFamilyType.Light:
                    fontFamilyResId = Resource.Style.FontRobotoLight;
                    break;
                case FontFamilyType.Regular:
                    fontFamilyResId = Resource.Style.FontRobotoRegular;
                    break;
                case FontFamilyType.Medium:
                    fontFamilyResId = Resource.Style.FontRobotoMedium;
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }


            Control.SetTextAppearance(fontFamilyResId);
        }
    }
}

Конечно, для Android вам понадобится еще 2 стиля (для легкого и обычного семьи). В styles.xml добавьте эти 2 стиля:

<style name="FontRobotoLight">
  <item name="android:fontFamily">sans-serif-light</item>
</style>

<style name="FontRobotoRegular">
  <item name="android:fontFamily">sans-serif</item>
</style>

Я хотел бы знать. Как я могу сделать это, не прибегая к созданию стилей XAML и для них:

Есть ли способ, которым я мог бы закодировать это в пользовательском рендерере. Поэтому все, что мне нужно сделать, это указать

FontFamilyType = "san-serif-light"

1 Ответ

0 голосов
/ 14 июля 2020

Если вы поместите шрифт в папку сборки, вы можете установить шрифт, как показано в следующем коде настраиваемого средства визуализации. TypefaceStyle предоставляет стиль Normal, Bold, Italic и BoldItalic.

[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);
        }
    }
}

Вот скриншот.

введите описание изображения здесь

==== update =======

Если вы хотите использовать шрифт sans-serif, вы можете создать Typeface, добавить атрибут Typeface.SansSerif как следующий код.

[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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...