Подтвердить что ты не робот

Пользовательский шрифт Android Spannable Typeface Span

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

4b9b3361

Ответ 1

Вам захочется написать пользовательский TypefaceSpan. Хорошей новостью является то, что они не сложны. См. здесь для примера.

Ответ 2

Вы можете сделать следующее:

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.