3

我想创建一个空的项目符号段落,但是没有用。这是我的代码:

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 创建一个空的项目符号段落?谢谢!

4

1 回答 1

6

我运行了你的代码,看看你的意思。“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);

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

另请注意我使用Spannable.SPAN_EXCLUSIVE_EXCLUSIVE了 ,否则当您开始通过退格删除文本时,您会突然看到额外的项目符号出现。

结果将如下所示:

创建一个空的 BulletSpan

于 2011-11-26T21:14:02.030 回答