SpannableString: è ansible applicare due o più RelativeSizeSpans?

Sto cercando di build una SpannableString in modo che assomigli a questo:

inserisci la descrizione dell'immagine qui

Due caratteri (m, s) dovrebbero essere più piccoli degli altri. Ho provato a tenere tutto il testo in una SpannableString e ho anche provato a concatenare due SpannableStrings tramite SpannableStringBuilder. Il codice per uno Spannable si presenta così:

spannable.setSpan(new RelativeSizeSpan(0.75f), spannable.length() - 1, spannable.length(), 0); 

Tuttavia, viene applicata solo una formattazione – quando si utilizza SpannableStringBuilder, solo la “m” è più piccola, e quando si utilizza una SpannableString per l’intero testo, solo la “s” è più piccola.

Il debug ha anche mostrato che Spannables sembra contenere solo un’istanza di RelativeSizeSpan, il che significa che può esserci un solo Span di un tipo. Questo comportamento è vero o previsto? Sarebbe preferibile concatenare TextViews?

EDIT: A proposito, sto cercando di rimuovere una chiamata HTML.fromHtml () qui per motivi di prestazioni (molte chiamate GC).

Solutions Collecting From Web of "SpannableString: è ansible applicare due o più RelativeSizeSpans?"

Se stai ancora cercando una risposta, potrei avere una soluzione. Ho avuto problemi simili. Ho usato TextUtils per SpannableString 2 SpannableString .

Ecco alcuni esempi di codice:

 SpannableString span1 = new SpannableString("32m"); SpannableString span2 = new SpannableString("50s"); span1.setSpan(new RelativeSizeSpan(0.75f), 2, 3, 0); span2.setSpan(new RelativeSizeSpan(0.75f), 2, 3, 0); mTextView.setText(TextUtils.concat(span1," " ,span2)); 

Non hai bisogno di 2 SpannableString separati. Una soluzione più breve può essere:

 SpannableString span1 = new SpannableString("32m50s"); span1.setSpan(new RelativeSizeSpan(0.75f), 2, 3, 0); span1.setSpan(new RelativeSizeSpan(0.75f), 5, 6, 0); mTextView.setText(span1); 

È ansible utilizzare la matrice di SpannableString.

Come in questo caso:

 TextView lblDescription=(TextView ) findViewById(R.id.lblDescription); SpannableString[] finalString = new SpannableString[stringSplit.length]; lblDescription.setText(TextUtils.concat(finalString)); 

Ho usato la versione dynamic della risposta di gbero nel mio progetto,

 public void updateTime(TextView tv) { Calendar calendar = Calendar.getInstance(); SpannableString span = new SpannableString( calendar.get(Calendar.HOUR_OF_DAY) + "h" + calendar.get(Calendar.MINUTE) + "m"); span.setSpan(new RelativeSizeSpan(0.75f), 2, 3, 0); span.setSpan(new RelativeSizeSpan(0.75f), 5, 6, 0); tv.setText(span); }