2014-01-29 92 views
0

我得到了一個edittext,它有多個彩色文本,如下面的代碼。有什麼方法可以存儲文本和顏色並再次顯示它們?我曾經使用SharedPreference存儲字符串整數等,但這不適用於Spannables。Android Spannable文本保存/存儲問題

Spannable span1 = new SpannableString("this"); 
Spannable span2 = new SpannableString("is"); 
Spannable span3 = new SpannableString("text"); 
span1.setSpan(new ForegroundColorSpan(Color.parseColor("#292929")), 0, span1.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
span2.setSpan(new ForegroundColorSpan(Color.parseColor("#2980b9")), 0, span2.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
span3.setSpan(new ForegroundColorSpan(Color.parseColor("#FFFFFF")), 0, span3.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

edittext.setText(TextUtils.concat(span1, span2, span3)); 

回答

1

您可以使用Html.toHtml()得到Spannable的HTML表示,然後使用Html.fromHtml()其轉換回。但是,你會想要徹底地測試它,因爲並不是所有的格式都能在往返中生存下來。

+0

是的,它的工作謝謝你! – user2638084

+0

我試過這個,但我是gettinf方塊 –

+0

嗨@CommonsWare,我有Spannable字符串,其中包含資產的字體樣式。當使用html.fromHtml時,缺少字體樣式。有沒有其他的方式來將Spannable存儲在sqlite中? – donmj

2

SpannableString不可見,所以您將無法保存並正確地重新創建它們。你可以做的是保存文本和跨度分開。跨度是parceable,所以他們會很好,當你重新創建它們。

Spannable span = new SpannableString("this is text"); 
span.setSpan(new ForegroundColorSpan(Color.parseColor("#292929")), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
span2.setSpan(new ForegroundColorSpan(Color.parseColor("#2980b9")), 5, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
span3.setSpan(new ForegroundColorSpan(Color.parseColor("#FFFFFF")), 8, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

// Save these 
String text = span.subString(0, span.length()); 
List<Span> spans = span.getSpans(0, span.length(), Object.class); 
+0

這很有趣 - 我想知道爲什麼span是'Parcelable'但是SpannedString'不是?但是,問題在於持久存儲事物,在這種情況下'Parcelable'沒有用處。 – CommonsWare