如何通过BulletSpan创建空白的子弹段落?

问题描述:

我想创建一个空的子弹段落,但它没有奏效。 这是我的代码:如何通过BulletSpan创建空白的子弹段落?

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创建一个空子弹段? 谢谢!

我跑你的代码,看看你的意思。 “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

+0

它的工作原理,非常感谢你对你的热情:) 我将与SpannableStringBuilder尝试。 – Leo

+2

这根本不起作用。 SPAN_EXCLUSIVE_EXCLUSIVE不能为0尺寸:( – ddmytrenko