我想创建一个空的子弹段,但它没有用。 这是我的代码:
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创建一个空子弹段? 谢谢!
答案 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
,否则当你开始通过退回来删除文字时,你会突然看到出现额外的子弹。
结果如下: