web-dev-qa-db-fra.com

Mettre en surbrillance Couleur du texte avec Html.fromHtml () sous Android?

Je développe une application dans laquelle il y aura un écran de recherche dans lequel 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'aimerai savoir si c'est la bonne façon de le faire ou non.

S'il vous plaît laissez-moi savoir votre point de vue à ce sujet.

79
sunil

Ou beaucoup plus simple que de traiter manuellement Spannables, puisque vous n'avez pas dit que vous voulez que l'arrière-plan soit mis en surbrillance, mais simplement le texte:

String styledText = "This is <font color='red'>simple</font>.";
textView.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE);
189
Christopher Orr

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); 
34
SergeyA

Cela peut être réalisé en utilisant une chaîne spannable. 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 personnages aux pos 1 - 4 avec une couleur rouge. J'espère que cela t'aides!

12
stealthcopter

Solution alternative: utiliser plutôt un WebView. Il est facile travailler avec HTML.

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");
4
Vidar Vestnes
 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
    }
4
Khyati Fatania

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

1
mhdtouban
textview.setText(Html.fromHtml("<font color='rgb'>"+text contain+"</font>"));

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

0
Naina

Pour faire une partie de votre texte souligné et coloré

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());
0
bsma