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