2013-04-17 62 views
6

我遇到SpannableString對象有問題。爲什麼我的文本在使用SpannableStringBuilder時沒有顯示樣式?

下面是一個簡單的例子:

SpannableString spanstr = new SpannableString("Bold please!"); 
spanstr.setSpan(new StyleSpan(Typeface.BOLD), 0, spanstr.length(), 0); 

SpannableStringBuilder sb = new SpannableStringBuilder(); 
sb.append(spanstr); 
sb.append("\n"); // A newline 
sb.append("The first line is bold. This one isn't."); 

CharSequence cq = sb.subSequence(0, sb.length()); 
// ^There's no such method to return a SpannableString, 
// so I try to return a CharSequence instead. 

// And then, at last: 
TextView contentView = (TextView) findViewById(R.id.some_id); 
contentView.setText(cq); 

什麼例子正試圖做的是展示這一點:

大膽請!
第一行是粗體。這一個不是。

但問題是:文本的第一行不會以粗體顯示。

爲什麼不這樣做呢?

+0

contentView.setText(sb);; – Raghunandan

+0

嘗試下面的答案 – Raghunandan

回答

16

使用spannable字符串生成器中的TextView設置爲文本:

contentView.setText(sb); 

否則,你可以這樣做:

SpannableStringBuilder spanstr = new SpannableStringBuilder("Bold please!"); 
spanstr.setSpan(new StyleSpan(Typeface.BOLD), 0, spanstr.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
spanstr.append("\n"); 
spanstr.append("The first line is bold. This one isn't."); 
contentView.setText(spanstr); 
+0

不適用於AlertDialog ... –

2

使用SpannableStringBuilder實例本身。

contentView.setText(sb); 

輸出與您的代碼:

enter image description here

+0

非常感謝。我在'spannableBuilder'上調用了'toString()',並且無法理解爲什麼我沒有看到樣式文本。 –

+0

@RenatKaitmazov你不應該在SpannableBuilder上調用toString()方法,如果你這樣做,它會認爲它是字符串,而不是一個樣式文本 – Pragnani

2

嘗試以下。您需要將spannable字符串設置爲textview。所以設置spannable字符串爲您的文本如下

String s= "The first line is bold. This one isn't"; 
String title="Bold Please!"; 
TextView tv = (TextView) findViewById(R.id.some_id); 
tv.setText(""); 
SpannableString ss1= new SpannableString(title); 
ss1.setSpan(new StyleSpan(Typeface.BOLD), 0, ss1.length(), 0); 
tv.append(ss1); 
tv.append("\n"); 
tv.append(s); 

我試過上面的,你可以看到下面的結果快照。

enter image description here

+0

謝謝..它的工作就像我想要實現的魅力 – KishuDroid

相關問題