2013-04-17 6 views
6

Ho un problema con un oggetto SpannableString.Perché il mio testo non viene visualizzato con stile quando si utilizza SpannableStringBuilder?

Qui di seguito un breve esempio:

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

Che l'esempio sta cercando di fare è mostrare questo:

Bold per favore!
La prima riga è in grassetto. Questo non lo è.

Ma il problema è: la prima riga del testo non verrà visualizzata in grassetto.

Perché non è previsto?

+0

contentView.setText (sb); – Raghunandan

+0

prova la risposta sotto – Raghunandan

risposta

16

utilizzare il generatore di stringa di spannable per la regolazione come testo in TextView:

contentView.setText(sb); 

o altro si può fare in questo modo:

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

Non funziona per AlertDialog ... –

2

utilizzo esempio SpannableStringBuilder stessa.

contentView.setText(sb); 

uscita con il tuo codice:

enter image description here

+0

Grazie mille. Ho chiamato 'toString()' su 'spannableBuilder' e non riuscivo a capire perché non stavo vedendo un testo in stile. –

+0

@RenatKaitmazov Non dovresti chiamare il metodo toString() su SpannableBuilder, se lo fai lo considererà come String, non un testo in stile – Pragnani

2

Prova il seguito. È necessario impostare la stringa da spanning sulla textview. Quindi impostare la stringa spannable al testo come di seguito

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

ho provato quanto sopra e si può vedere l'istantanea risultante di seguito.

enter image description here

+0

Grazie .. Funziona come un fascino come quello che voglio implementare – KishuDroid