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

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