如何用BulletSpan创建一个空子弹段?

时间:2011-11-26 18:16:46

标签: android android-edittext spannable

我想创建一个空的子弹段,但它没有用。 这是我的代码:

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);

当我运行上面的代码时,似乎这行不起作用

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

相反,我在“123”之后看到一个意想不到的空白区域。 任何人都知道如何用BulletSpan创建一个空子弹段? 谢谢!

1 个答案:

答案 0 :(得分:5)

我运行了你的代码,看看你的意思。 “123”之后的奇怪空白似乎是一个图形故障,因为它实际上并不被视为空间角色;即按下退格键,您将看到数字“3”被删除。

话虽如此,幸运的是,您可以轻松解决问题:您需要更改应用跨度的索引。将您自己代码中的行换成下面的行,您将看到奇怪的空白区域消失,第三个空子弹出现。这也会在子弹和它后面的实际文本之间引入一些间距。

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);

就个人而言,我倾向于使其更加灵活,并将完整的字符串分解为单独的部分并迭代这些部分。使用SpannableStringBuilder,您可以附加文本并设置每个连接的跨度。在水下这已经发生了,因为在运行时contentET.getText()实际上会返回一个SpannableStringBuilder。 :)

另请注意,我使用了Spannable.SPAN_EXCLUSIVE_EXCLUSIVE,否则当你开始通过退回来删除文字时,你会突然看到出现额外的子弹。

结果如下:

Creating an empty BulletSpan