Single TextView con texto coloreado múltiple

Como dice el título, quiero saber si es posible lograr dos caracteres de colores diferentes en un único elemento textview.

Sí, si formatea la String con font-color propiedad font-color html font-color luego la pasa al método Html.fromHtml(your text here)

 String text = "<font color=#cc0029>First Color</font> <font color=#ffcc00>Second Color</font>"; yourtextview.setText(Html.fromHtml(text)); 

Puede imprimir líneas con varios colores sin HTML como:

  TextView TV = (TextView)findViewById(R.id.mytextview01); Spannable word = new SpannableString("Your message"); word.setSpan(new ForegroundColorSpan(Color.BLUE), 0, word.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); TV.setText(word); Spannable wordTwo = new SpannableString("Your new message"); wordTwo.setSpan(new ForegroundColorSpan(Color.RED), 0, wordTwo.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); TV.append(wordTwo); 

Puede utilizar Spannable para aplicar efectos a su TextView :

Aquí está mi ejemplo para colorear sólo la primera parte de un texto TextView (mientras que le permite establecer el color de forma dinámica en lugar de codificación en una cadena como con el ejemplo HTML)

  mTextView.setText("Red text is here", BufferType.SPANNABLE); Spannable span = (Spannable) mTextView.getText(); span.setSpan(new ForegroundColorSpan(0xFFFF0000), 0, "Red".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 

En este ejemplo puede reemplazar 0xFFFF0000 por un getResources().getColor(R.color.red)

He hecho de esta manera:

Consultar referencia

Establecer color en texto pasando cadena y color :

 private String getColoredSpanned(String text, String color) { String input = "<font color=" + color + ">" + text + "</font>"; return input; } 

Establecer texto en TextView / Button / EditText etc llamando a continuación código:

Vista de texto:

 TextView txtView = (TextView)findViewById(R.id.txtView); 

Obtener cuerda de color:

 String name = getColoredSpanned("Hiren", "#800000"); String surName = getColoredSpanned("Patel","#000080"); 

Establecer texto en TextView de dos cadenas con diferentes colores:

 txtView.setText(Html.fromHtml(name+" "+surName)); 

Hecho

Utilizar SpannableStringBuilder

 SpannableStringBuilder builder = new SpannableStringBuilder(); SpannableString str1= new SpannableString("Text1"); str1.setSpan(new ForegroundColorSpan(Color.RED), 0, str1.length(), 0); builder.append(str1); SpannableString str2= new SpannableString(appMode.toString()); str2.setSpan(new ForegroundColorSpan(Color.GREEN), 0, str2.length(), 0); builder.append(str2); TextView tv = (TextView) view.findViewById(android.R.id.text1); tv.setText( builder, TextView.BufferType.SPANNABLE); 

Tengo escribir un código para otra pregunta que es similar a éste, pero esa pregunta se duplicó por lo que no puedo responder allí por lo que estoy poniendo mi código aquí si alguien busca el mismo requisito.

No es un código totalmente operativo, es necesario realizar algunos cambios menores para que funcione.

Aquí está el código:

He utilizado @Graeme idea de usar texto spannable.

 String colorfulText = "colorfulText"; Spannable span = new SpannableString(colorfulText); for ( int i = 0, len = colorfulText.length(); i < len; i++ ){ span.setSpan(new ForegroundColorSpan(getRandomColor()), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } ((TextView)findViewById(R.id.txtSplashscreenCopywrite)).setText(span); 

Método aleatorio del color:

  private int getRandomColor(){ Random rnd = new Random(); return Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); } 

Hey chicos he hecho esto, pruébalo

 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 ti, la clase TextViewUtils añade 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. */ public static Spannable getColoredString(String mString, int colorId) { Spannable spannable = new SpannableString(mString); spannable.setSpan(new ForegroundColorSpan(colorId), 0, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Log.d(TAG,spannable.toString()); return spannable; } 

Utilice la clase SpannableBuilder en lugar del formato HTML donde sea posible porque es más rápido que el análisis de formato HTML. Ver mi propio punto de referencia "SpannableBuilder vs HTML" en Github Gracias!

Prueba esto:

 mBox = new TextView(context); mBox.setText(Html.fromHtml("<b>" + title + "</b>" + "<br />" + "<small>" + description + "</small>" + "<br />" + "<small>" + DateAdded + "</small>")); 

Respuestas impresionantes! Pude utilizar Spannable para construir el texto coloreado arco iris (así que esto podría ser repetido para cualquier arsenal de colores). Aquí está mi método, si ayuda a alguien:

 private Spannable buildRainbowText(String pack_name) { int[] colors = new int[]{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 = new SpannableString(pack_name); for(int i = 0; i < word.length(); i++) { word.setSpan(new ForegroundColorSpan(colors[i]), i, i+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } return word; } 

Y entonces sólo setText (buildRainboxText (pack_name)); Tenga en cuenta que todas las palabras que paso en son menos de 15 caracteres y esto sólo repite 5 colores 3 veces – que desea ajustar los colores / longitud de la matriz para su uso!

 if (Build.VERSION.SDK_INT >= 24) { Html.fromHtml(String, flag) // for 24 API and more } else { Html.fromHtml(String) // or for older API } 

Para 24 API y más (bandera)

 public static final int FROM_HTML_MODE_COMPACT = 63; public static final int FROM_HTML_MODE_LEGACY = 0; public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; 

Más información

  • TextView de Android y envoltura de texto
  • Espaciado de línea individual para cada línea
  • ¿Cómo hago el centro vertical de dos puntos en TextView
  • TextView: lineSpacingMultiplier y lineSpacingExtra también se aplica a la última línea
  • Android: Crear TextView que parpadea cuando se hace clic
  • Evitar que TextView se envuelva en el elemento principal
  • Campo o etiqueta oculto en TextView?
  • Configuración de un ancho de TextView en java
  • ¿Cómo actualizar un TextView en una actividad de un servicio en Android?
  • Actualizar dinámicamente TextView en Android
  • Android Html.fromHtml (String) no funciona para <font color = '#'> text </ font>
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.