Ответ 1
Вам захочется написать пользовательский TypefaceSpan. Хорошей новостью является то, что они не сложны. См. здесь для примера.
Я использую шрифты 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 шрифта выше связаны с тем, чтобы они могли легко их переключать. Ищете любой другой способ сделать это.
Вам захочется написать пользовательский TypefaceSpan. Хорошей новостью является то, что они не сложны. См. здесь для примера.
Вы можете сделать следующее:
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.