c# - Xamarin Android 同一 TextView 中的多种字体

标签 c# android xamarin fonts xamarin.android

我正在为 Android 应用程序使用 Xamarin,并且我创建了一个自定义 TypeFace,如下所示:

Typeface weatherFont = Typeface.CreateFromAsset(Assets, "Weather.ttf");

我的问题是我有一个必须分配给 TextViewstring 并且我需要将前 3 个字符的字体设置为默认的 android 字体剩下的是我的 weatherFont 字体。我该怎么做?

最佳答案

直到 API-27,您需要自定义 CharacterStyle 子类才能将自定义 Typeface 应用于 Spannable

示例:

var sushiFont = Typeface.CreateFromAsset(Assets, "Tastysushi.ttf");
var spannable = new SpannableString("123 = SushiHangover");
spannable.SetSpan (new CustomTypefaceSpan(sushiFont), 3, spannable.Length(), SpanTypes.ExclusiveInclusive);
button.SetText(spannable, TextView.BufferType.Spannable);

或者在 API-21(+) 中,您可以使用 SpannableStringBuilder.Append 避免 SetSpan 字符开始/结束索引:

var sushiFont = Typeface.CreateFromAsset(Assets, "Tastysushi.ttf");
var spannableString = new SpannableStringBuilder("123");
var spannable = new SpannableString(" = SushiHangover");
spannableString.Append(spannable, new CustomTypefaceSpan(sushiFont), SpanTypes.ExclusiveInclusive);
button.SetText(spannableString, TextView.BufferType.Spannable);

并且在 API-28+ 中,您可以直接创建直接包含不同 Typeface 的 span,而无需使用 CharacterStyle 子类:

spannableString.Append(spannable, new TypefaceSpan(sushiFont), SpanTypes.ExclusiveInclusive);

CustomTypefaceSpan 类

public class CustomTypefaceSpan : MetricAffectingSpan
{
    readonly Typeface typeFace;

    public CustomTypefaceSpan(Typeface typeFace)
    {
        this.typeFace = typeFace;
    }

    public override void UpdateDrawState(TextPaint tp)
    {
        tp.SetTypeface(typeFace);
    }

    public override void UpdateMeasureState(TextPaint p)
    {
        p.SetTypeface(typeFace);
    }
}

关于c# - Xamarin Android 同一 TextView 中的多种字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775726/

相关文章:

c# - 为什么绑定(bind)不更新选择器选择的项目

c# - 更改传递给虚拟方法的类型

c# - 在 C# 和 C++ 之间传输图像数据

c# - 添加安全 header 以帮助防止 c# asp.net 中的注入(inject)攻击

java - 如何在另一个线程中创建 Android 通知?

android - Intent 对象未触发 Intent 过滤器

c# - Kinect SDK 1.0 + 统一/ blender

java - 如何在 android 中将这些数字对齐到小数点?

arrays - 是否可以将自定义大小的 int 数组数组保存为 RealmObject 的字段?

xamarin - 当 Shell.Current.Navigation.PopAsync() 返回页面时,对于 iOS 会触发 OnAppearing,但对于 Android 则不会