Применение HTML-форматированной строки из XML в TextView
Быстрый ответ
Для мгновенной вставки HTML в TextView примените следующий код:
textView.setText(Html.fromHtml(getString(R.string.html_string), Html.FROM_HTML_MODE_LEGACY));
В файле strings.xml добавьте HTML, используя CDATA:
<string name="html_string"><![CDATA[<b>Жирный</b> текст, <i>курсив</i>]]></string>
Метод Html.fromHtml()
конвертирует HTML в Spannable текст для вашего TextView.
Обработка специальных символов HTML
Временами, работая с HTML, могут возникать сложности:
- Символы, такие как ' (апостроф), " (кавычка), & (амперсанд), считаются специальными и требуют экранирования.
- Чтобы корректно отобразить амперсанд, используйте
&
, чтобы поддержать код в чистоте.
Совместимость с различными версиями Android
Подходы к работе с HTML могут отличаться в зависимости от версии Android:
- Для Android до версии N (API 24) достаточно было использовать метод
Html.fromHtml()
. - Начиная с версии Android Nougat, можно использовать Markdown или определённые флаги метода
Html.fromHtml()
, чтобы обеспечить элегантность и точность отображения. - Важным является использование
Build.VERSION.SDK_INT
для проверки версии Android API.
Пользовательские классы и атрибуты
Создайте подкласс TextView для расширения функционала:
public class HtmlTextView extends TextView {
public HtmlTextView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.HtmlTextView);
String htmlText = a.getString(R.styleable.HtmlTextView_htmlText);
if (htmlText != null) {
setText(Html.fromHtml(htmlText, Html.FROM_HTML_MODE_COMPACT));
}
a.recycle();
}
}
Такое решение намного элегантнее, чем привлечение Activity для форматирования TextView
.
Отказ от устаревших методов
С каждым обновлением Android разработчикам приходится вносить изменения в свой код.
- Применяйте
HtmlCompat.fromHtml()
из библиотеки AndroidX. - Следите за тем, чтобы
strings.xml
соответствовал последним рекомендациям Android.
Визуализация
Применение HTML-форматированных строк в XML для элемента TextView выглядит так:
<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/html_formatted_string" />
Элемент в strings.xml
:
<string name="html_formatted_string">
<![CDATA[
<b>Жирный</b> и <i>Курсив</i> текст.
]]>
</string>
Обычный текст в XML: "Жирный и Курсив текст."
Текст на экране после преобразования: Жирный и Курсив текст.
Неофициальные методы и техники
Иногда полезные методы и техники можно найти на форумах сообществ или трекерах ошибок. Это своего рода сюрпризы для разработчиков!
Сторонние библиотеки на помощь
В случаях, когда встроенные средства не справляются:
- Markwon используется для отображения Markdown в
TextView
, как альтернатива HTML-форматированию. - Библиотеки, такие как RichTextView, облегчают работу с HTML и Markdown.
Изысканное стилизование текста
Оформляйте тексты в TextView
так, как будто это делает ваш личный дворецкий:
- Используйте
жирный
, курсив,подчеркнутый
и другие стили прямо вstrings.xml
. - Забудьте о getString() и используйте getText(), чтобы сохранить все стилевые элементы вашего текста.
Пользовательский TextView — кратчайший путь к успеху
Использование пользовательского TextView раскрывает новые возможности управления отображением HTML и уменьшает дублирование кода.
Полезные материалы
- Строковые ресурсы | Разработчики Android — подробное руководство по строковым ресурсам в Android-разработке.
- android – Как отобразить HTML в TextView? – Stack Overflow — сообщество, где профессионалы помогают решить проблемы.
- Строковые ресурсы | Разработчики Android — детально о стилизации текста с помощью HTML в Android.
- XML в Android: Основы и разные XML-файлы, используемые в Android | Abhi Android — исчерпывающее руководство по XML в Android.
- Обзор ресурсов приложений | Разработчики Android — руководство по ресурсам в приложениях Android.
- Домашняя страница · codepath/android_guides wiki · GitHub — коллекция кодовых фрагментов и руководств для разработчиков на Android.