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

我想让字符串的一部分是 HeleveticaNeueBold,而有些只是 HelveticaNeue。我认为需要向 Android 表明上面的 3 种字体实际上是相关的,以便它可以很好地切换它们。寻找任何其他方式来做到这一点。

4

2 回答 2

20

您将要编写自定义 TypefaceSpan。好消息是它们并不困难。有关示例,请参见此处。

于 2012-05-04T14:22:53.647 回答
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 中引入的。

于 2019-09-28T02:48:37.283 回答