How to create a empty bullet paragraph by BulletSp

2019-02-25 07:34发布

I wanted to create a empty bullet paragraph, but it didn't work. This is my code:

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

When i ran above code, it seemed this line doesn't work

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

Instead, i saw an unexpected white space after "123". Anyone knows how to create a empty bullet paragraph by BulletSpan? Thanks!

1条回答
叛逆
2楼-- · 2019-02-25 08:34

I ran your code and see what you mean. The strange white space after "123" appears to be a graphical glitch, because it's not actually treated as a space character; i.e. hit backspace and you'll see that the number "3" gets removed.

That being said, fortunately there's an easy fix for your problem: you'll need to change the indices on which you're applying the spans. Swap out the lines in your own code for the ones below and you'll see both the strange white space is gone and a third, empty bullet appears. This will also introduce some spacing between the bullet and the actual text following it.

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

Personally I would tend make this a bit more flexible and break up the complete string into separate parts and iterate over those. Using a SpannableStringBuilder you can then append text and set spans with every concatenation. Under water this is already happening, as at runtime contentET.getText() will actually return a SpannableStringBuilder. :)

Also notice I used Spannable.SPAN_EXCLUSIVE_EXCLUSIVE, as otherwise you'll suddenly see extra bullets appearing when you start removing text by backspacing it.

The result will look like this:

Creating an empty BulletSpan

查看更多
登录 后发表回答