web-dev-qa-db-fra.com

Afficher <ul> <li> dans la vue de texte Android

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?

20
aman.nepid

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()));
42
Pavel

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

9
K_Anas

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?

6
ρяσѕρєя K

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 &#149; (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;

http://www.ascii-code.com/

4
Taner

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.

0
jameswoo

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;
}
0
Shane