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í: