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

  • ¿Fragment.getArguments () devuelve los argumentos pasados ​​después de los cambios de configuración?
  • Obtener la variante de la configuración regional para el chino simplificado
  • Crash in Activity Transitions con SharedElement
  • Cómo mostrar o leer el archivo docx
  • Cambiar el tamaño de la imagen del archivo
  • WebView en problemas con NestedScrollView
  • 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 ?

  • Modificación de la salida de la cámara con SurfaceTexture y OpenGL
  • Fragmento ya agregó IllegalStateException
  • Android: Cómo evitar que al hacer clic en una notificación llama onCreate ()
  • Retrofit que lanza IllegalArgumentException exception for asynchronous FormUrlEncoded DELETE call
  • Loader entrega el resultado al fragmento incorrecto
  • Android SDK Content Loader falla con NullPointerException
  • 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.