2011-11-26 82 views
3

我想創建一個空的子彈段落,但它沒有奏效。 這是我的代碼:如何通過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創建一個空子彈段? 謝謝!

回答

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

就我個人而言,我會傾向於使這個更靈活一點,並將完整的字符串分解成單獨的部分並迭代這些部分。使用SpannableStringBuilder,您可以添加文本並在每個連接中設置跨度。在水下,這已經發生了,因爲在運行時contentET.getText()實際上會返回一個SpannableStringBuilder。 :)

另請注意,我使用了Spannable.SPAN_EXCLUSIVE_EXCLUSIVE,否則在通過退格開始刪除文本時,您會突然看到額外的項目符號出現。

結果將是這樣的:

Creating an empty BulletSpan

+0

它的工作原理,非常感謝你對你的熱情:) 我將與SpannableStringBuilder嘗試。 – Leo

+2

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