No olvides escapar de la entrada de usuario usando Html.escapeHtml(str).
Kelunik
1
Añadido en el nivel de API 1
2red13
3
Sólo una advertencia. Estaba teniendo un problema cuando necesitaba que mi texto estuviera en mayúscula. Estaba usando android: textAllCaps = "true" en XML y, al mismo tiempo, tenía mi contenido HTML en mayúsculas. No estaba funcionando Eliminé el atributo XML y ahora funciona bien. Tenga cuidado, porque si usa setAllCaps () en el código, aparecerá el mismo problema.
genial, gracias, también puedes hacer BackgroundColorSpan. hay un pequeño error tipográfico en su ejemplo, WordToSpan y WordtoSpan, tenga en cuenta el caso en To
No funciona para mí obtener `java.lang.StringIndexOutOfBoundsException: length = 3; index = 12`
Muhammad Babar
1
StringIndexOutOfBoundsException en sí mismo explicativo. Está accediendo a una cadena más allá de su longitud.
Swapnil Kotwal
1
Mis cadenas no fueron reparadas, por lo que las cadenas se generarían en el tiempo de ejecución de la aplicación. He intentado casi todas las respuestas de esta pregunta. Pero solo esta solución funcionó para mí.
Md. Sabbir Ahmed
33
Puede usar Spannablepara aplicar efectos a su TextView:
Aquí está mi ejemplo para colorear solo la primera parte de un TextViewtexto (¡mientras le permite configurar el color dinámicamente en lugar de codificarlo en una cadena como en el ejemplo HTML!)
mTextView.setText("Red text is here",BufferType.SPANNABLE);Spannable span =(Spannable) mTextView.getText();
span.setSpan(newForegroundColorSpan(0xFFFF0000),0,"Red".length(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
En este ejemplo, puede reemplazar 0xFFFF0000 con un getResources().getColor(R.color.red)
TextView textView=(TextView)findViewById(R.id.yourTextView);//init//here I am appending two string into my textView with two diff colors.//I have done from fragment so I used here getActivity(), //If you are trying it from Activity then pass className.this or this;
textView.append(TextViewUtils.getColoredString(getString(R.string.preString),ContextCompat.getColor(getActivity(),R.color.firstColor)));
textView.append(TextViewUtils.getColoredString(getString(R.string.postString),ContextCompat.getColor(getActivity(),R.color.secondColor)));
Dentro de tu clase TextViewUtils agrega este método
/***
*
* @param mString this will setup to your textView
* @param colorId text will fill with this color.
* @return string with color, it will append to textView.
*/publicstaticSpannable getColoredString(String mString,int colorId){Spannable spannable =newSpannableString(mString);
spannable.setSpan(newForegroundColorSpan(colorId),0, spannable.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);Log.d(TAG,spannable.toString());return spannable;}
Lo actualicé ahora, verifíquelo una vez, está funcionando para mí.
Abdul Rizwan
¿Puede usar Html.fromHtml para usar esta cadena?
Sergey Shustikov
dentro del archivo string.xml He creado una variable y configuré esto, me está funcionando justo ahora que estoy haciendo esto, ¿pueden darme su cadena aquí?
Abdul Rizwan
5
Es mejor usar la cadena en el archivo de cadenas, como tal:
<stringname="some_text">
<![CDATA[
normal color <fontcolor=\'#06a7eb\'>special color</font>]]>
</string>
He escrito un código para otra pregunta que es similar a esta, pero esa pregunta se ha duplicado, así que no puedo responder allí, así que solo pongo mi código aquí si alguien busca el mismo requisito.
No es un código completamente funcional, debe hacer algunos cambios menores para que funcione.
Aquí está el código:
He usado la idea de @Graeme de usar texto que se puede cambiar.
String colorfulText ="colorfulText";Spannable span =newSpannableString(colorfulText);for(int i =0, len = colorfulText.length(); i < len; i++){
span.setSpan(newForegroundColorSpan(getRandomColor()), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}((TextView)findViewById(R.id.txtSplashscreenCopywrite)).setText(span);
Utilice la clase SpannableBuilder en lugar del formato HTML donde sea posible porque es más rápido que el análisis del formato HTML. Vea mi propio punto de referencia "SpannableBuilder vs HTML" en Github
¡Gracias!
Respuestas impresionantes! Pude usar Spannable para construir texto de color arcoíris (por lo que esto podría repetirse para cualquier variedad de colores). Aquí está mi método, si ayuda a alguien:
privateSpannable buildRainbowText(String pack_name){int[] colors =newint[]{Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE};Spannable word =newSpannableString(pack_name);for(int i =0; i < word.length(); i++){
word.setSpan(newForegroundColorSpan(colors[i]), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}return word;}
Y luego simplemente configuroText (buildRainboxText (pack_name)); Tenga en cuenta que todas las palabras que paso tienen menos de 15 caracteres y esto solo repite 5 colores 3 veces. ¡Desea ajustar los colores / longitud de la matriz para su uso!
Desde API 24 tiene FROM_HTML_OPTION_USE_CSS_COLORS para que pueda definir colores en CSS en lugar de repetirlo todo el tiempo con font color="
mucho más claro, cuando tiene algo de HTML y desea resaltar algunas etiquetas predefinidas, solo necesita agregar un fragmento de CSS en la parte superior de su HTML
Respuestas:
Sí, si formatea el
String
conhtml
'sfont-color
propiedad luego pasarlo al métodoHtml.fromHtml(your text here)
fuente
Html.escapeHtml(str)
.Html.fromHtml(String)
ahora está en desuso, en lugar de usarHtml.fromHtml(String, Html.FROM_HTML_MODE_LEGACY)
. Más información se puede encontrar aquí.Puede imprimir líneas con múltiples colores sin HTML como:
fuente
Puede usar
Spannable
para aplicar efectos a suTextView
:Aquí está mi ejemplo para colorear solo la primera parte de un
TextView
texto (¡mientras le permite configurar el color dinámicamente en lugar de codificarlo en una cadena como en el ejemplo HTML!)En este ejemplo, puede reemplazar 0xFFFF0000 con un
getResources().getColor(R.color.red)
fuente
He hecho de esta manera:
El conjunto de colores de texto por el que pasa de cuerdas y el color :
Configure el texto en TextView / Button / EditText, etc. llamando al código siguiente:
Vista de texto:
Obtener cadena de color:
Establecer texto en TextView de dos cadenas con diferentes colores:
Hecho
fuente
Html.fromHtml("...")
con llamadas aHtml.fromHtml("...", FROM_HTML_MODE_LEGACY)
Utilice SpannableStringBuilder
fuente
Hola chicos, he hecho esto, pruébalo
Dentro de tu clase TextViewUtils agrega este método
fuente
Es mejor usar la cadena en el archivo de cadenas, como tal:
Uso:
fuente
He escrito un código para otra pregunta que es similar a esta, pero esa pregunta se ha duplicado, así que no puedo responder allí, así que solo pongo mi código aquí si alguien busca el mismo requisito.
No es un código completamente funcional, debe hacer algunos cambios menores para que funcione.
Aquí está el código:
He usado la idea de @Graeme de usar texto que se puede cambiar.
Método de color aleatorio:
fuente
Prueba esto:
fuente
Utilice la clase SpannableBuilder en lugar del formato HTML donde sea posible porque es más rápido que el análisis del formato HTML. Vea mi propio punto de referencia "SpannableBuilder vs HTML" en Github ¡Gracias!
fuente
Respuestas impresionantes! Pude usar Spannable para construir texto de color arcoíris (por lo que esto podría repetirse para cualquier variedad de colores). Aquí está mi método, si ayuda a alguien:
Y luego simplemente configuroText (buildRainboxText (pack_name)); Tenga en cuenta que todas las palabras que paso tienen menos de 15 caracteres y esto solo repite 5 colores 3 veces. ¡Desea ajustar los colores / longitud de la matriz para su uso!
fuente
para 24 API y más (marca)
Más información
fuente
Desde API 24 tiene FROM_HTML_OPTION_USE_CSS_COLORS para que pueda definir colores en CSS en lugar de repetirlo todo el tiempo con
font color="
mucho más claro, cuando tiene algo de HTML y desea resaltar algunas etiquetas predefinidas, solo necesita agregar un fragmento de CSS en la parte superior de su HTMLfuente
25 de junio de 2020 por @canerkaseler
Después, llame a la función anterior. Puedes llamar a más de uno:
Salida: puede ver subrayado y diferentes colores entre sí.
@canerkaseler
fuente