How to create a empty bullet paragraph by BulletSpan?

為{幸葍}努か 提交于 2019-12-20 02:22:06

问题


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:


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:



来源:https://stackoverflow.com/questions/8280528/how-to-create-a-empty-bullet-paragraph-by-bulletspan

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!