SpannableString:是否可以应用两个或多个RelativeSizeSpans?

我正在尝试构build一个SpannableString,使其看起来像这样:

在这里输入图像说明

两个字符(m,s)应该小于其余的字符。 我试图把所有的文本保存在一个SpannableString中,我也试图通过一个SpannableStringBuilder连接两个SpannableStrings。 一个Spannable的代码如下所示:

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

但是,只应用一种格式 – 当使用SpannableStringBuilder时,只有“m”较小,而对整个文本使用一个SpannableString时,只有“s”较小。

debugging还显示,Spannable似乎只能保存RelativeSizeSpan的一个实例,这意味着只能有一个types的Span。 这是真实还是预期的行为? 连接TextViews是否可取?

编辑:顺便说一句,我想在这里删除一个HTML.fromHtml()调用性能的原因(许多GC调用)。

如果你仍然在寻找答案,我可能有一个解决scheme。 我有类似的问题。 我用TextUtils来连接2 SpannableString

以下是一些示例代码:

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

你不需要2个独立的SpannableString。 较短的解决scheme可以是:

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

你可以使用SpannableString的数组。

像这样的情况:

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

我在我的项目中使用了gbero的答案的dynamic版本,

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