我在整个应用程序中使用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种字体实际上是相关的,以便它可以很好地切换它们。寻找其他任何方式。
答案 0 :(得分:19)
您将要编写自定义TypefaceSpan。好消息是他们并不困难。有关示例,请参阅here。
答案 1 :(得分: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中引入的。