Typeface.ITALIC не работает на Galaxy Note 2

Я делаю приложение, в котором иногда хочу изменить шрифт текстового представления на курсив, в зависимости от данных, которые нужно показать.

На моем Galaxy Nexus это просто случай

textView.setTypeface(font, iWantItalics ? Typeface.ITALIC : Typeface.NORMAL);

и это прекрасно работает.

Проблема в том, что у меня есть новый Galaxy Note II для тестирования и... нет, курсива нет.

Чтение устройств Samsung, поддерживающих setTypeface(Typeface.Italic)? У меня создается впечатление, что это ошибка в Android-сборке Note, поэтому шрифт Roboto просто не имеет курсива. Я перепробовал все советы по этой теме и другие подобные (Typeface.defaultFromStyle(Typeface.ITALIC), Typeface.create(null, Typeface.ITALIC)и т. д.) без удачи.

Моя проблема в том, что обходной путь, который использовал парень из этой темы, копировал Roboto TTF в assets каталог и создание шрифта оттуда, но как насчет людей с другим шрифтом по умолчанию в своих телефонах? Я не хочу навязывать им Roboto или, что еще хуже, использовать другой шрифт, когда гарнитура нормальная, а Roboto - курсивом в противном случае.

У кого-нибудь есть идея для меня? Благодарю.

2 ответа

Решение

В качестве обходного пути для этой ошибки вы можете установить курсив таким образом (который, кажется, работает на сломанных устройствах Samsung):

textView.setText(setTextStyleItalic(textView.getText());

и вам нужен этот метод:

public static CharSequence setTextStyleItalic(CharSequence text) {
    final StyleSpan style = new StyleSpan(Typeface.ITALIC);
    final SpannableString str = new SpannableString(text);
    str.setSpan(style, 0, text.length(), 0);
    return str;
}

Другое простое решение - сделать это так:

myTextView.setText(Html.fromHtml("<i>" + myString + "</i>"));
Другие вопросы по тегам