Android自定义字体Spannable Typeface Span

22

我在整个应用程序中使用 Helvetica 字体。目前,我是从资源中单独创建这些字体的。因此,我有三种不同大小的字体:

HelveticaNeue = Typeface.createFromAsset(application.getAssets(), "fonts/HelveticaNeue.ttf");
HelveticaNeueBold = Typeface.createFromAsset(application.getAssets(), "fonts/HelveticaNeueBold.ttf");
HelveticaNeueBoldItalic = Typeface.createFromAsset(application.getAssets(), "fonts/HelveticaNeueBoldItalic.ttf");

当我为一个 TextView 使用一种字体时,一切都很完美。但是,我需要使用 spannable。

Spannable WordtoSpan = new SpannableString("This text should be normal, but this needs to be bold, and normal");    
WordtoSpan.setSpan(new TypefaceSpan("bold"), 5, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

我想让字符串的一部分显示为HelveticaNeueBold,另一部分则为HelveticaNeue。我认为需要告诉Android这三种字体实际上是相关的,以便它可以很好地切换它们。还在寻找其他的方法。


你找到这个问题的答案了吗?请分享解决方案。我也想在一个TextView中使用两种Helvetica字体))) 谢谢。 - valerybodak
请点击这里查看关于如何使用自定义字体设置 Spannable 对象字体的答案: [Click here] (https://dev59.com/AGw15IYBdhLWcg3wcbWy#51378290) - Himanshu
2个回答

20

你需要编写一个自定义的TypefaceSpan。好消息是它们并不难。参见这里的示例。


0
你可以做以下事情:
SpannableString spannableString = new SpannableString("your text");
Typeface typeface = Typeface.create(ResourcesCompat.getFont(this, R.font.your_font);
spannableString.setSpan(
    new TypefaceSpan(typeface, Typeface.NORMAL)), 
    0, 4, 
    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

这个构造函数将替换文本的先前样式,实现你想要的效果。然而,问题在于它是在API 28中引入的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接