¿Resaltando el color del texto usando Html.fromHtml () en Android?


84

Estoy desarrollando una aplicación en la que habrá una pantalla de búsqueda donde el usuario puede buscar palabras clave específicas y esa palabra clave debe estar resaltada. He encontrado el método Html.fromHtml.

Pero me gustaría saber si es la forma correcta de hacerlo o no.

Por favor déjeme saber su opinión al respecto.



Respuestas:


197

O mucho más simple que tratar con Spannablelos mensajes de correo electrónico manualmente, ya que no dijo que deseaba resaltar el fondo, solo el texto:

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

8
Vale la pena señalar que Html.fromHtml es más lento que SpannableString, porque implica análisis. Pero para un texto breve, no importa
Michał K

Parece haber otra solución en el enlace . Vea la respuesta de Legend.
Kenneth Evans

1
Solo como comentario, descubrí que no necesitaba pasar TextView.BufferType.SPANNABLE y aún funcionaba. ¡Gracias!
James

¿Conoce algún editor html para organizar texto largo para Android? por ejemplo, estoy tratando de usar este sitio ( html.am/html-editors/html-text-editor.cfm ) pero si quiero ver la fuente, devuelve el color <span style="color:#ff0000;">para que Android no cambie el color.
mehmet

@mehmet Presumiblemente, podría simplemente buscar y reemplazar para cambiar las etiquetas <span> por etiquetas <font> con un atributo de "color".
Christopher Orr

35

Usando el valor de color del recurso 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); 

bien hecho. útil para poder usar colores de los recursos de sus aplicaciones.
speedynomads

Quiero enfatizar la segunda línea, donde subcadena el color hexadecimal: ¡el valor alfa invalidaría la configuración de color! ¡No lo olvides!
marcolav

12

Esto se puede lograr utilizando una cadena extensible. Deberá importar lo siguiente

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

Y luego puede cambiar el fondo del texto usando algo como lo siguiente:

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

Donde esto resaltará los personajes en la posición 1 - 4 con un color rojo. ¡Espero que esto ayude!


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
    }

¿Cómo obtener el color de fuente de color.xml?
Noor Hossain

4

Solución alternativa: usar WebView en su lugar. Html es fácil de trabajar.

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");

2

la fuente está en desuso, use span en su lugar Html.fromHtml("<span style=color:red>"+content+"</span>")


1

Para hacer parte de su texto subrayado y coloreado

en tu 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>

luego en la actividad

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

y para enlaces en los que se puede hacer clic:

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

y en tu actividad:

yourTextView.setText(Html.fromHtml(getString(R.string.text_with_link)));
yourTextView.setMovementMethod(LinkMovementMethod.getInstance());

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

Le dará el color exactamente lo que ha hecho en el editor html, simplemente configure la vista de texto y concatézcala con el valor de vista de texto. Android no es compatible con el color del intervalo, cámbielo a color de fuente en el editor y estará listo para comenzar.


0

Primero convierta su cadena en HTML y luego conviértala en spannable. haga lo que sugiere los siguientes códigos.

 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);
            
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.