Mettre en évidence la couleur du texte à l'aide de Html.fromHtml () sous Android?

84

Je développe une application dans laquelle il y aura un écran de recherche où l'utilisateur peut rechercher des mots-clés spécifiques et ce mot-clé doit être mis en évidence. J'ai trouvé la méthode Html.fromHtml.

Mais j'aimerais savoir si c'est la bonne façon de le faire ou non.

Veuillez me faire part de votre opinion à ce sujet.

Sunil
la source
consultez pour un exemple de travail. javatechig.com/2013/04/07/how-to-display-html-in-android-view
Nilanchal
Possibilité de duplication de Est-il possible d'avoir plusieurs styles dans un TextView?
blahdiblah

Réponses:

197

Ou bien plus simple que de traiter les Spannables manuellement, puisque vous n'avez pas dit que vous vouliez que l'arrière-plan soit mis en évidence, juste le texte:

String styledText = "This is <font color='red'>simple</font>.";
textView.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE);
Christophe Orr
la source
8
Il convient de noter que Html.fromHtml est plus lent que SpannableString, car il implique une analyse syntaxique. Mais pour un court texte, peu importe
Michał K
Il semble y avoir une autre solution au lien . Voir la réponse par Legend.
Kenneth Evans
1
Juste comme commentaire, j'ai trouvé que je n'avais pas besoin de passer TextView.BufferType.SPANNABLE et que cela fonctionnait toujours. Merci!
James
connaissez-vous un éditeur html pour organiser du texte long pour Android. par exemple, j'essaye d'utiliser ce site ( html.am/html-editors/html-text-editor.cfm ) mais si je veux voir la source, il renvoie la couleur <span style="color:#ff0000;">pour qu'androïde ne change pas la couleur.
mehmet
@mehmet Vous pouvez vraisemblablement simplement rechercher et remplacer pour changer les balises <span> en balises <font> avec un attribut "couleur".
Christopher Orr
35

Utilisation de la valeur de couleur de la ressource xml:

int labelColor = getResources().getColor(R.color.label_color);
String сolorString = String.format("%X", labelColor).substring(2); // !!strip alpha value!!

Html.fromHtml(String.format("<font color=\"#%s\">text</font>", сolorString), TextView.BufferType.SPANNABLE); 
SergeyA
la source
Bien fait. utile pour pouvoir utiliser les couleurs de vos ressources d'applications.
speedynomads
Je veux souligner la deuxième ligne, où vous sous-chaîne la couleur hex: valeur alpha rendrait le paramètre de couleur invalide! N'oubliez pas!
marcolav
12

Cela peut être réalisé à l'aide d'une chaîne pouvant être étendue. Vous devrez importer les éléments suivants

import android.text.SpannableString; 
import android.text.style.BackgroundColorSpan; 
import android.text.style.StyleSpan;

Et puis vous pouvez changer l'arrière-plan du texte en utilisant quelque chose comme ce qui suit:

TextView text = (TextView) findViewById(R.id.text_login);
text.setText("");
text.append("Add all your funky text in here");
Spannable sText = (Spannable) text.getText();
sText.setSpan(new BackgroundColorSpan(Color.RED), 1, 4, 0);

Où cela mettra en évidence les caractères aux pos 1 - 4 avec une couleur rouge. J'espère que cela t'aides!

furtif
la source
5
 String name = modelOrderList.get(position).getName();   //get name from List
    String text = "<font color='#000000'>" + name + "</font>"; //set Black color of name
    /* check API version, according to version call method of Html class  */
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N) {
        Log.d(TAG, "onBindViewHolder: if");
        holder.textViewName.setText(context.getString(R.string._5687982) + " ");
        holder.textViewName.append(Html.fromHtml(text));
    } else {
        Log.d(TAG, "onBindViewHolder: else");
        holder.textViewName.setText("123456" + " ");   //set text 
        holder.textViewName.append(Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY));   //append text into textView
    }
Khyati Fatania
la source
comment obtenir la couleur de la police de color.xml?
Noor Hossain le
4

Solution alternative: utiliser une WebView à la place. Html est facile à utiliser.

WebView webview = new WebView(this);

String summary = "<html><body>Sorry, <span style=\"background: red;\">Madonna</span> gave no results</body></html>";

webview.loadData(summary, "text/html", "utf-8");
Vidar Vestnes
la source
2

la police est obsolète, utilisez plutôt span Html.fromHtml("<span style=color:red>"+content+"</span>")

mhdtouban
la source
1

Pour rendre une partie de votre texte soulignée et colorée

dans votre strings.xml

<string name="text_with_colored_underline">put the text here and &lt;u>&lt;font color="#your_hexa_color">the underlined colored part here&lt;font>&lt;u></string>

puis dans l'activité

yourTextView.setText(Html.fromHtml(getString(R.string.text_with_colored_underline)));

et pour les liens cliquables:

<string name="text_with_link"><![CDATA[<p>text before link<a href=\"http://www.google.com\">title of link</a>.<p>]]></string>

et dans votre activité:

yourTextView.setText(Html.fromHtml(getString(R.string.text_with_link)));
yourTextView.setMovementMethod(LinkMovementMethod.getInstance());
bsma
la source
0
textview.setText(Html.fromHtml("<font color='rgb'>"+text contain+"</font>"));

Il donnera la couleur exactement ce que vous avez fait dans l'éditeur html, il suffit de définir la vue de texte et de la concaténer avec la valeur de la vue de texte. Android ne prend pas en charge la couleur d'étendue, changez-la en couleur de police dans l'éditeur et vous êtes prêt à partir.

Naina
la source
0

Commencez par convertir votre chaîne en HTML, puis convertissez-la en spannable. faites comme suggèrent les codes suivants.

 Spannable spannable = new SpannableString(Html.fromHtml(labelText));
                    
spannable.setSpan(new ForegroundColorSpan(Color.parseColor(color)), spannable.toString().indexOf("•"), spannable.toString().lastIndexOf("•") + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            
Ch Khurram
la source