android spannablestring spannable

android - SpannableString: ¿Es posible aplicar dos o más RelativeSizeSpans?



(4)

No necesita 2 SpannableString por separado. Una solución más corta puede ser:

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

Estoy tratando de construir un SpannableString de modo que se vea así:

Dos caracteres (m, s) deben ser más pequeños que el resto. Intenté contener todo el texto en un SpannableString, y también traté de concatenar dos SpannableStrings a través de SpannableStringBuilder. El código para un Spannable se ve así:

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

Sin embargo, solo se aplica un formato: cuando se usa SpannableStringBuilder, solo la "m" es más pequeña, y cuando se usa SpannableString para todo el texto, solo la "s" es más pequeña.

La depuración también mostró que los Spannables parecen contener solo una instancia de RelativeSizeSpan, lo que significa que solo puede haber un Span de un tipo. ¿Es este comportamiento cierto o esperado? ¿Sería aconsejable concatenar TextViews en su lugar?

EDITAR: por cierto, estoy tratando de eliminar una llamada HTML.fromHtml () aquí por razones de rendimiento (muchas llamadas GC).


Puede usar una matriz de SpannableString.

Como en este caso:

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


Si todavía está buscando una respuesta, podría tener una solución. Tuve problemas similares TextUtils para TextUtils el SpannableString 2.

Aquí hay un código de ejemplo:

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


Tengo una versión dinámica de la respuesta de Gbero en mi proyecto,

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