¿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.

Sunil
fuente
echa un vistazo a un ejemplo práctico. javatechig.com/2013/04/07/how-to-display-html-in-android-view
Nilanchal

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);
Christopher Orr
fuente
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); 
SergeyA
fuente
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!

helicóptero sigiloso
fuente
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
fuente
¿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");
Vidar Vestnes
fuente
2

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

mhdtouban
fuente
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());
bsma
fuente
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.

Naina
fuente
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);
            
Ch Khurram
fuente