Android: Colorear parte de una cadena usando TextView.setText ()?

Estoy tratando de cambiar el texto de una vista de TextView a través del método .setText ("") al tiempo que colorear una parte del texto (o hacerlo en negrita, cursiva, transparente, etc) y no el resto. Por ejemplo:

title.setText("Your big island <b>ADVENTURE!</b>"; 

Sé que el código anterior es incorrecto, pero ayuda a ilustrar lo que me gustaría lograr. ¿Cómo haría esto?

Utilice vanos .

Ejemplo:

 final SpannableStringBuilder sb = new SpannableStringBuilder("your text here"); // Span to set text color to some RGB value final ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(158, 158, 158)); // Span to make text bold final StyleSpan bss = new StyleSpan(android.graphics.Typeface.BOLD); // Set the text color for first 4 characters sb.setSpan(fcs, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); // make them also bold sb.setSpan(bss, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); yourTextView.setText(sb); 
 title.setText(Html.fromHtml("Your big island <b>ADVENTURE!</b>")); 

Espero que esto te ayude (funciona con varios idiomas).

 <string name="test_string" ><![CDATA[<font color="%1$s"><b>Test/b></font>]]> String</string> 

Y en tu código java, puedes hacer lo siguiente:

 int color = context.getResources().getColor(android.R.color.holo_blue_light); String string = context.getString(R.string.test_string, color); textView.setText(Html.fromHtml(string)); 

De esta forma, sólo la parte "Prueba" será de color (y negrita).

He aquí un ejemplo que buscará todas las apariciones de una palabra (insensible a mayúsculas y minúsculas) y las coloreará en rojo:

 String notes = "aaa AAA xAaax abc aaA xxx"; SpannableStringBuilder sb = new SpannableStringBuilder(notes); Pattern p = Pattern.compile("aaa", Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(notes); while (m.find()){ //String word = m.group(); //String word1 = notes.substring(m.start(), m.end()); sb.setSpan(new ForegroundColorSpan(Color.rgb(255, 0, 0)), m.start(), m.end(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); } editText.setText(sb); 

Puede utilizar un Spannable para dar ciertas partes de un texto de ciertos aspectos. Puedo buscar un ejemplo si quieres.

Ah, de aquí mismo en stackoverflow .

 TextView TV = (TextView)findViewById(R.id.mytextview01); Spannable WordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers"); WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); TV.setText(WordtoSpan); 

Si desea utilizar HTML, debe utilizar TextView.setText(Html.fromHtml(String htmlString))

Si quieres hacer eso a menudo / repetidamente, puedes echar un vistazo a una clase ( SpannableBuilder ) que escribí, ya que Html.fromHtml() no es muy eficiente (está usando una gran máquina de análisis xml dentro). Se describe en esta publicación del blog .

Puede concatenar dos o más Espacios. De esta manera es más fácil de color de texto dinámico con el valor de longitud.

 SpannableStringBuilder span1 = new SpannableStringBuilder("Android"); ForegroundColorSpan color1=new ForegroundColorSpan(getResources().getColor(R.color.colorPrimary)); span1.setSpan(color1, 0, span1.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); SpannableStringBuilder span2 = new SpannableStringBuilder("Love"); ForegroundColorSpan color2=new ForegroundColorSpan(getResources().getColor(R.color.colorSecondary)); span2.setSpan(color2, 0, span2.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); Spanned concatenated=(Spanned) TextUtils.concat(span1," => ",span2); SpannableStringBuilder result = new SpannableStringBuilder(concatenated); TextView tv = (TextView) rootView.findViewById(R.id.my_texview); tv.setText(result, TextView.BufferType.SPANNABLE); 

Utilizar este código es útil

 TextView txtTest = (TextView) findViewById(R.id.txtTest); txtTest.setText(Html.fromHtml("This is <font color="#ff4343">Red</font> Color!")); 
  String str1 = "If I forget my promise to "; String penalty = "Eat breakfast every morning,"; String str2 = " then I "; String promise = "lose my favorite toy"; String strb = "<u><b><font color='#081137'>"+ penalty +",</font></b></u>"; String strc = "<u><b><font color='#081137'>"+ promise + "</font></b></u>"; String strd = str1 +strb+ str2 + strc; tv_notification.setText(Html.fromHtml(strd)); 
  • Grados (como en Grados Celsius / Fahrenheit) en un TextView
  • Ocultar TextView después de algún tiempo en Android
  • Problema de diseño con Android: girado TextView
  • Palabra que se puede hacer clic en TextView en android
  • Custom TextView en android con diferentes palabras de color
  • TextView.setTextSize se comporta anormalmente - Cómo establecer el tamaño de texto de textview dinámicamente para diferentes pantallas
  • Fundido de fondo de un android de vista de texto
  • Cómo cambiar el texto en Android TextView
  • Necesita hacer que TextView se desplace verticalmente automáticamente
  • ¿Cómo hago el centro vertical de dos puntos en TextView
  • Android TextView: establecer dinámicamente el color de fondo no funciona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.