893 votes

Comment afficher du HTML dans un TextView ?

J'ai de simples HTML :

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

Je veux afficher du texte stylé en HTML en TextView . Comment faire ?

8 votes

Voulez-vous afficher les balises ou les omettre ?

1 votes

Consultez ce lien pour un exemple fonctionnel javatechig.com/2013/04/07/how-to-display-html-in-Android-view

1 votes

Si vous cherchez la solution de l'obsolescence, c'est ici. stackoverflow.com/questions/37904739/

31voto

Shashanth Points 2335

Je sais que cette question est ancienne. D'autres réponses suggèrent ici Html.fromHtml() méthode. Je vous suggère d'utiliser HtmlCompat.fromHtml() de androidx.core.text.HtmlCompat paquet. Comme il s'agit d'une version rétrocompatible de Html classe.

Exemple de code :

import androidx.core.text.HtmlCompat;
import android.text.Spanned;
import android.widget.TextView;

String htmlString = "<h1>Hello World!</h1>";

Spanned spanned = HtmlCompat.fromHtml(htmlString, HtmlCompat.FROM_HTML_MODE_COMPACT);

TextView tvOutput = (TextView) findViewById(R.id.text_view_id);

tvOutput.setText(spanned);

De cette façon, vous évitez de vérifier la version de l'API Android et c'est facile à utiliser (solution à une seule ligne).

0 votes

En quoi est-ce différent du vieux methot ? A quoi sert le mode html ?

4 votes

Je cherchais quelque chose comme ça. Merci :)

3 votes

Je me suis spécialement connecté pour mettre en avant votre réponse. C'est ce que tout le monde devrait utiliser. Merci.

27voto

Raavanan Points 43

Le code ci-dessous a donné le meilleur résultat pour moi.

TextView myTextview = (TextView) findViewById(R.id.my_text_view);
htmltext = <your html (markup) character>;
Spanned sp = Html.fromHtml(htmltext);
myTextview.setText(sp);

14voto

Pedro Points 11
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());

0 votes

Comment changer la couleur de l'ancre ?

0 votes

Android:textColorLink="couleur"

0 votes

Cela colorera tout le texte en rouge, mais si je ne veux que les balises d'ancrage, je dois envelopper la balise <a> avec des balises <font> et ajouter la couleur à l'intérieur.

13voto

prom85 Points 4879

Si vous voulez simplement afficher du texte html et que vous n'avez pas vraiment besoin d'une fonction TextView puis prendre un WebView et l'utiliser comme suit :

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

Cela ne vous limite pas non plus à quelques balises html.

3 votes

Bien qu'il s'agisse d'un moyen très utile de contourner l'ensemble restreint de balises html prises en charge par TextView, il présente l'inconvénient suivant ne fonctionne pas bien avec layout_height="wrap_content" . Vous devrez définir une hauteur ou un match_parent explicite à la place.

5 votes

Webview est très lent

12voto

Rajendhiran Easu Points 129

La meilleure approche consiste à utiliser les sections CData pour la chaîne de caractères dans le fichier strings.xml pour obtenir un affichage réel du contenu html dans le TextView. L'extrait de code ci-dessous vous donnera une idée juste.

//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));

La section CData dans le texte de la chaîne conserve les données de la balise html intactes même après le formatage du texte à l'aide de la méthode String.format. Ainsi, Html.fromHtml(str) fonctionne bien et vous verrez le texte en gras dans le message de bienvenue.

Sortie :

Bienvenue dans votre magasin d'applications musicales préféré. Connecté en tant que : nom d'utilisateur

0 votes

Merci, cela a fonctionné pour moi - en utilisant l'API 23.

0 votes

Merci, vous avez sauvé ma journée :) Juste un petit ajout : Nous devons ajouter cette vérification au code ci-dessus : if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // pour 24 api et plus textView.setText(Html.fromHtml(welcomStr, Html.FROM_HTML_OPTION_USE_CSS_COLORS)) ; } else { // ou pour une api plus ancienne textView.setText(Html.fromHtml(welcomStr)) ; } . La valeur du deuxième paramètre pour l'API>=24, peut être n'importe quoi selon les besoins.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X