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

Leo*_*Leo 3 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);
Run Code Online (Sandbox Code Playgroud)

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

s.setSpan(new BulletSpan(), 7, 8, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
Run Code Online (Sandbox Code Playgroud)

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

MH.*_*MH. 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);
Run Code Online (Sandbox Code Playgroud)

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

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

结果将如下所示:

创建一个空的BulletSpan

  • 这根本不起作用.SPAN_EXCLUSIVE_EXCLUSIVE不能为0大小:( (2认同)