Как отобразить HTML в TextView? - PullRequest
       138

Как отобразить HTML в TextView?

702 голосов
/ 22 января 2010

У меня просто HTML :

<h2>Title</h2><br>
<p>description here</p>

Я хочу отобразить текст в стиле HTML в TextView. Как это сделать?

Ответы [ 21 ]

1250 голосов
/ 22 января 2010

Вам нужно использовать Html.fromHtml(), чтобы использовать HTML в ваших XML-строках. Простая ссылка на строку с HTML в вашем макете XML не будет работать.

Вот что вы должны сделать:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    textView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>", Html.FROM_HTML_MODE_COMPACT));
} else { 
    textView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>"));
}
67 голосов
/ 11 января 2017

setText (Html.fromHtml (bodyData)) равно устарело после API 24. Теперь вы должны сделать это:

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
      tvDocument.setText(Html.fromHtml(bodyData,Html.FROM_HTML_MODE_LEGACY));
 } else {
      tvDocument.setText(Html.fromHtml(bodyData));
 }
61 голосов
/ 06 мая 2012

Посмотрите на это: https://stackoverflow.com/a/8558249/450148

Это тоже очень хорошо !!

<resource>
    <string name="your_string">This is an <u>underline</u> text demo for TextView.</string>
</resources>

Работает только для нескольких тегов.

40 голосов
/ 13 декабря 2014

Если вы хотите иметь возможность настроить его с помощью XML без каких-либо изменений в Java-коде, вам может пригодиться эта идея. Просто вы вызываете init из конструктора и устанавливаете текст как html

public class HTMLTextView extends TextView {
    ... constructors calling init...
    private void init(){
       setText(Html.fromHtml(getText().toString()));
    }    
}

xml:

        <com.package.HTMLTextView
        android:text="@string/about_item_1"/>
22 голосов
/ 21 октября 2013

Следующий код дал лучший результат для меня.

TextView myTextview = (TextView) findViewById(R.id.my_text_view);
htmltext = <your html (markup) character>;
Spanned sp = Html.fromHtml(htmltext);
myTextview.setText(sp);
19 голосов
/ 08 июля 2016

Если вы пытаетесь отобразить HTML из строкового идентификатора ресурса, форматирование может не отображаться на экране. Если это происходит с вами, попробуйте вместо этого использовать теги CDATA:

strings.xml:
<string name="sample_string"><![CDATA[<h2>Title</h2><br><p>Description here</p>]]></string>

...

MainActivity.java:
text.setText(Html.fromHtml(getString(R.string.sample_string));

Подробнее см. . .

12 голосов
/ 02 декабря 2014
String value = "<html> <a href=\"http://example.com/\">example.com</a> </html>";
    SiteLink= (TextView) findViewById(R.id.textViewSite);
    SiteLink.setText(Html.fromHtml(value));
    SiteLink.setMovementMethod(LinkMovementMethod.getInstance());
11 голосов
/ 26 июня 2015

Если вы просто хотите отобразить html-текст и вам не нужен TextView, тогда возьмите WebView и используйте его так:

String htmlText = ...;
webview.loadData(htmlText , "text/html; charset=UTF-8", null);

Это также не ограничивает вас несколькими html-тегами.

10 голосов
/ 22 июня 2016

Стоит отметить, что метод Html.fromHtml (String source) устарел начиная с уровня API 24. Если это ваш целевой API, вам следует использовать Html.fromHtml (String source, int флаги) вместо.

10 голосов
/ 19 августа 2016

Лучший подход к использованию разделов CData для строки в файле strings.xml, чтобы получить фактическое отображение html-содержимого в TextView, приведенный ниже фрагмент кода, даст вам правильную идею.

//in string.xml file
<string name="welcome_text"><![CDATA[<b>Welcome,</b> to the forthetyroprogrammers blog Logged in as:]]> %1$s.</string>

//and in Java code
String welcomStr=String.format(getString(R.string.welcome_text),username);
tvWelcomeUser.setText(Html.fromHtml(welcomStr));

Раздел CData в тексте строки сохраняет данные тега html без изменений даже после форматирования текста с использованием метода String.format. Итак, Html.fromHtml (str) работает нормально, и вы увидите жирный текст в приветственном сообщении.

Выход:

Добро пожаловать в ваш любимый музыкальный магазин приложений. Вы вошли как: имя пользователя

...