Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo establecer múltiples extensiones en el texto de TextView en el mismo texto parcial?

Supongamos que tengo el siguiente texto:

Hola stackOverflow

Y deseo fijar la segunda palabra para ser RelativeSizeSpan (para fijar un tamaño relativo de la fuente) y TextAppearanceSpan (para fijar el color del texto), ¿cómo los fusiono ambos?

Todo lo que sé es que puedo elegir uno de ellos, con el siguiente código por ejemplo:

final SpannableString textToShow = new SpannableString("Hello stackOverflow"); textToShow.setSpan(new RelativeSizeSpan(1.5f), textToShow.length() - "stackOverflow".length(),textToShow.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(textToShow); 

Pero necesito también fijar el color, o incluso agregar otras características de otras clases que abarcan …

Que puedo hacer ?

  • Combinación de Spannable con String.format ()
  • El texto se ensucia con ImageSpan en EditText
  • ¿Cómo puedo utilizar onTouchListeners en cada palabra en un TextView?
  • Cómo alinear TextView alrededor de un ImageView?
  • Android EditText: ¿Cómo crear un párrafo de viñeta vacío de BulletSpan?
  • Ajuste de la alineación del texto mediante SpannableString
  • Android SpannableString establecer fondo detrás de parte del texto
  • Obtener Spannable String de EditText
  • 2 Solutions collect form web for “¿Cómo establecer múltiples extensiones en el texto de TextView en el mismo texto parcial?”

    Simplemente establezca tramos adicionales. Se van a superponer / fusionar cuando sea necesario. Este código funciona para mí:

     final SpannableString text = new SpannableString("Hello stackOverflow"); text.setSpan(new RelativeSizeSpan(1.5f), text.length() - "stackOverflow".length(), text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); text.setSpan(new ForegroundColorSpan(Color.RED), 3, text.length() - 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.setText(text); 

    Sé que esto es una nueva respuesta a una pregunta ya contestada, pero me gustaría compartir una clase de utilidad he hecho que hace esta tarea más fácil.

     public class SimpleSpanBuilder { private class SpanSection{ private final String text; private final int startIndex; private final ParcelableSpan[] spans; public SpanSection(String text, int startIndex,ParcelableSpan... spans){ this.spans = spans; this.text = text; this.startIndex = startIndex; } public void apply(SpannableStringBuilder spanStringBuilder){ if (spanStringBuilder == null) return; for (ParcelableSpan span : spans){ spanStringBuilder.setSpan(span, startIndex, startIndex + text.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } } } private List<SpanSection> spanSections; private StringBuilder stringBuilder; public SimpleSpanBuilder(){ stringBuilder = new StringBuilder(); spanSections = new ArrayList<>(); } public SimpleSpanBuilder append(String text,ParcelableSpan... spans){ if (spans != null && spans.length > 0) { spanSections.add(new SpanSection(text, stringBuilder.length(),spans)); } stringBuilder.append(text); return this; } public SpannableStringBuilder build(){ SpannableStringBuilder ssb = new SpannableStringBuilder(stringBuilder.toString()); for (SpanSection section : spanSections){ section.apply(ssb); } return ssb; } @Override public String toString() { return stringBuilder.toString(); } } 

    Uso:

     SimpleSpanBuilder ssb = new SimpleSpanBuilder(); ssb.append("Hello"); ssb.append(" "); ssb.append("stackOverflow",new ForegroundColorSpan(Color.RED),new RelativeSizeSpan(1.5)); textView.setText(ssb.build()); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.