logo

Вывод HTML в TextView на Android: работа с <h2>, <p>

Быстрый ответ

Чтобы внедрить HTML-код в TextView на Android, используйте функцию Html.fromHtml(). Этот метод конвертирует HTML-элементы в Spannable формат, который корректно отображается в TextView.

Вот пример его использования:

Java
Скопировать код
String htmlContent = "<b>Жирный</b> <i>Курсив</i>";
textView.setText(Html.fromHtml(htmlContent));

Имейте ввиду, что поддерживаются только основные HTML-теги, такие как <b>, <i>, <u>. Использование сложных CSS стилей и JavaScript не реализуется.

Совместимость с версиями Android

На устройствах с Android 24 и новее рекомендуется использовать флаг Html.FROM_HTML_MODE_COMPACT, который обеспечивает упрощённое преобразование HTML для TextView. Пример кода:

Java
Скопировать код
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    // Для новых устройств
    textView.setText(Html.fromHtml(htmlContent, Html.FROM_HTML_MODE_COMPACT));
} else {
    // Для старых версий
    textView.setText(Html.fromHtml(htmlContent));
}

Для обеспечения совместимости со старыми и новыми устройствами можно применить Html.FROM_HTML_MODE_LEGACY.

HTML-контент в XML ресурсах

Осуществление определения HTML-кода в XML ресурсах выполняется с помощью HTML-сущностей для кодирования специальных символов:

xml
Скопировать код
<string name="html_content">
    &lt;b&gt;Жирный&lt;/b&gt; &lt;i&gt;Курсив&lt;/i&gt;
</string>

Чтобы обратиться к этому контенту в коде, используйте:

Java
Скопировать код
String htmlContent = getString(R.string.html_content);
textView.setText(Html.fromHtml(htmlContent));

Это позволит сохранить HTML-форматирование и обеспечит поддержку мультиязычности.

Создание пользовательского TextView для HTML

Возможно создание производного от TextView с инкапсулированной функцией обработки HTML:

Java
Скопировать код
public class HTMLTextView extends TextView {
    public HTMLTextView(Context context) {
        super(context);
    }

    public HTMLTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setHtmlText(String htmlText) {
        setText(Html.fromHtml(htmlText));
    }
}

Применение HTMLTextView в XML макетах:

xml
Скопировать код
<com.example.HTMLTextView
    android:id="@+id/html_text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/html_content" />

Работа со сложными HTML-сценариями

Отображение сложного HTML с CSS и JavaScript на Android ограничено. Однако, с помощью библиотеки Jsoup можно преодолеть эти ограничения и выполнить более гибкое управление парсингом и отображением HTML-контента.

Визуализация

В TextView на Android при использовании HTML происходят следующие преобразования:

kotlin
Скопировать код
val textView: TextView = findViewById(R.id.textView)
textView.text = Html.fromHtml("<h2>Заголовок</h2><br><p>Описание здесь</p>")

Текст в TextView подобен холсту, каждый HTML-тег добавляет нечто уникальное в эту картину:

Markdown
Скопировать код
Обычный TextView: "Просто текст."
➡️🎨💡
TextView с HTML: "**Просто** текст." (Использована HTML магия)

Каждый HTML-тег вносит свой уникальный оттенок в картину, сформированную в TextView.

Работа с CDATA и HTML в XML

При работе с XML ресурсами используйте блок <![CDATA[ ]]> для защиты HTML-кода от нежелательных изменений:

xml
Скопировать код
<string name="html_content"><![CDATA[
    <h2>Это заголовок</h2>
    <p>Это <b>жирный</b> текст параграфа.</p>
]]></string>

Это позволяет более точно воспроизводить сложные HTML-структуры с использованием функции Html.fromHtml().