¿Hay algún ejemplo sobre texto extendido e Spannable?

Estoy luchando con el uso de EditText y el objeto de texto Spannable, en estos días, he leído documentos de API alrededor de diez veces, incluso no estoy seguro de entenderlo correctamente. Así que estoy buscando un tipo de ejemplo que me muestre cómo utilizar EditText y Spannable.

Como no especifica lo que no puede comprender de la API, es difícil responder a sus preguntas (respuesta breve: vuelva a escribir su pregunta en una pregunta específica en lugar de en una general).

Un ejemplo típico de Spannable es algo como esto para convertir el texto seleccionado en un EditText en cursiva:

Spannable str = mBodyText.getText(); if(mBodyText.getSelectionEnd() > mBodyText.getSelectionStart()) str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), mBodyText.getSelectionStart(), mBodyText.getSelectionEnd(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); else str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), mBodyText.getSelectionEnd(), mBodyText.getSelectionStart(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

Esto se corta y pega de otra manera, por lo que su pastabilidad directa podría haber sufrido, pero al menos muestra un ejemplo funcional de Spannable (en este caso, un StyleSpan ). En la API puedes encontrar los otros tipos de Spans (especialmente ImageSpan , que es una pregunta común entre droides convertidos recientemente).

Estoy comenzando a tratar de resolverlo también, y parece innecesariamente complicado.

Aquí hay un método de trabajo para agregar NUEVO texto divisible a una vista existente. Quería agregar texto en color a una vista, y esta parecía ser la única forma de hacerlo.

A pesar de que se siente como un hack feo, puedes crear un TextView ficticio (no se muestra en ningún lugar) y darle un estilo al texto, luego anexar ese texto con estilo a donde quieras. El crédito es para iifuzz en anddev.org. Mi código se ve así:

  spanbuffer = new TextView(context); spanbuffer.setText(newText, TextView.BufferType.SPANNABLE); Spannable s = (Spannable) spanbuffer.getText(); s.setSpan(new ForegroundColorSpan(Color.RED), 0, newText.length() - 1, 0); this.append(s); 

Creo que se supone que debes poder crear un nuevo texto interactivo usando SpannableFactory, así:

  Spannable s = Spannable.Factory.getInstance().newSpannable(newText); 

pero no pude obtener este texto para mostrar realmente nuevos efectos de amplitud, así que me di por vencido.