J'ai String avec ul et li dedans. Et j'essaie de les montrer au format HTML dans textview.textView.setText(Html.fromHtml(myHtmlText));
Mais textview affiche le texte brut. Comment puis-je avoir les balises ul et li formatées dans textview?
Vous pouvez utiliser Html.TagHandler.
Dans votre cas ce sera comme ça:
public class UlTagHandler implements Html.TagHandler{
@Override
public void handleTag(boolean opening, String tag, Editable output,
XMLReader xmlReader) {
if(tag.equals("ul") && !opening) output.append("\n");
if(tag.equals("li") && opening) output.append("\n\t•");
}
}
et
textView.setText(Html.fromHtml(myHtmlText, null, new UlTagHandler()));
Tags pris en charge dans les ressources de chaîne
Les balises des ressources de chaînes statiques sont analysées par Android.content.res.StringBlock, qui est une classe masquée. J'ai parcouru la classe et déterminé quelles balises sont prises en charge:
<a> (supports attributes "href")
<annotation>
<b>
<big>
<font> (supports attributes "height", "size", "fgcolor" and "bicolor", as integers)
<i>
<li>
<Marquee>
<small>
<strike>
<sub>
<sup>
<tt>
<u>
Tags supportés par Html.fromHtml ()
Pour une raison quelconque, Html.fromHtml () gère un ensemble de balises différent de celui pris en charge par le texte statique. Voici une liste des balises (extraites du code source de Html.Java):
<a> (supports attribute "href")
<b>
<big>
<blockquote>
<br>
<cite>
<dfn>
<div>
<em>
<font> (supports attributes "color" and "face")
<i>
<img> (supports attribute "src". Note: you have to include an ImageGetter to handle retrieving a Drawable for this tag)
<p>
<small>
<strong>
<sub>
<sup>
<tt>
<u>
voir ceci lien pour plus de détails
voir Les balises HTML prises en charge par TextView les deux balises ul et li ne sont pas prises en charge par Android.text.Html class.
SOLUTION: vous pouvez afficher ces balises avec WebView ou avec TagHandler
pour plus d'aide voir ce post:
Balise de liste HTML ne fonctionne pas dans textview Android. Que puis-je faire?
Selon la réponse ci-dessous, vous ne pouvez pas utiliser toutes les balises HTML ici;
https://stackoverflow.com/a/3150456/2275962
Mais, bien sûr, il existe un moyen d’afficher des puces dans Android TextView. Vous pouvez remplacer les balises <li>
par •
(code HTML pour bullet).
Si vous voulez essayer d'autres icônes de liste, utilisez celle qui est recommandée dans le tableau: ce lien;
Un moyen très simple de faire fonctionner les choses pour les API de niveau M (23) et inférieur À partir de votre chaîne HTML, vous pouvez utiliser les éléments suivants:
private fun String.formattedHtml(): String {
// Work around for API Versions lower than N, Html.fromHtml does not render list items correctly
return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
this.replace("<ul>", "")
.replace("</ul>", "")
.replace("<li>", "<p>• ")
.replace("</li>", "</p>")
} else {
this
}
}
Ensuite, vous pouvez utiliser:
Html.fromHtml("<ul><li> test </li></ul>".formattedHtml())
Pas besoin de TagHandler
pour les API N et supérieures, comme indiqué dans https://stackoverflow.com/a/40524835 , Android.text.Html
prend en charge les balises li
et ul
.
Dans mon cas, mes données proviennent d'un appel d'API. J'avais toujours besoin que la sortie corresponde au format de mon application, aussi j'emballe la chaîne HTML dans des balises de mise en forme à afficher dans ma WebView:
public static String formatHtmlString(String stringIn) {
String format = "<html>"
+ " <head>"
+ " <style type='text/css'>"
+ " body { "
+ " font-family: \"HelveticaNeue-Light\", \"Helvetica Neue Light\"; "
+ " font-size:14px;" + " color:#000;"
+ " }" + " b { " + " font-size:14px;"
+ " }" + " i { " + " font-size:10px;"
+ " color:#333333;" + " opacity:0.75;"
+ " }" + " </style>" + " </head>" + " <body>"
+ stringIn + "</body>" + "</html>";
return format;
}