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 ?
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 ?
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).
Je me suis spécialement connecté pour mettre en avant votre réponse. C'est ce que tout le monde devrait utiliser. Merci.
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.
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.
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
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 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.
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/
1 votes
Textview.setText(Html.fromHtml("your HTML")) ; est la meilleure méthode pour afficher uniquement les balises HTML. Il existe également une méthode pour jouer du JS.
0 votes
Android ne prend pas en charge toutes les balises HTML. Vérifiez ceci arkapp.medium.com/Android-set-html-in-text-view-b912e1a96b21 pour mieux comprendre comment utiliser l'affichage du texte.