android android-edittext spannable

android - ¿Cómo crear un párrafo de viñeta vacío por BulletSpan?



android-edittext spannable (1)

Quería crear un párrafo de viñeta vacío, pero no funcionó. Este es mi código:

EditText contentET = (EditText) findViewById(R.id.content); contentET.setText("abc/n123/n"); Spannable s = contentET.getText(); s.setSpan(new BulletSpan(), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE); s.setSpan(new BulletSpan(), 4, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE); s.setSpan(new BulletSpan(), 7, 8, Spannable.SPAN_INCLUSIVE_INCLUSIVE); contentET.setText(s);

Cuando corrí por encima del código, parecía que esta línea no funcionaba

s.setSpan(new BulletSpan(), 7, 8, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

En cambio, vi un espacio en blanco inesperado después de "123". ¿Alguien sabe cómo crear un párrafo de viñeta vacío por BulletSpan? ¡Gracias!


Ejecuté tu código y veo a qué te refieres. El extraño espacio en blanco después de "123" parece ser un error gráfico, porque en realidad no se trata como un carácter espacial; es decir, pulse retroceso y verá que se elimina el número "3".

Dicho esto, afortunadamente hay una solución fácil para su problema: tendrá que cambiar los índices en los que está aplicando los tramos. Cambie las líneas en su propio código para las siguientes y verá que tanto el extraño espacio en blanco se ha ido y aparece una tercera viñeta vacía. Esto también introducirá algo de espacio entre la viñeta y el texto real que la sigue.

s.setSpan(new BulletSpan(), 0, 0, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); s.setSpan(new BulletSpan(), 4, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); s.setSpan(new BulletSpan(), 8, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

Personalmente, me gustaría hacer esto un poco más flexible y dividir la cadena completa en partes separadas e iterar sobre ellas. Usando un SpannableStringBuilder puede agregar texto y establecer tramos con cada concatenación. Bajo el agua esto ya está sucediendo, ya que en tiempo de ejecución, contentET.getText() devolverá un SpannableStringBuilder. :)

También noté que utilicé Spannable.SPAN_EXCLUSIVE_EXCLUSIVE , ya que de lo contrario, repentinamente aparecerán viñetas adicionales cuando empiece a eliminar texto retrocediendo.

El resultado se verá así: