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

man*_*mal 40 android spannablestring spannable

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

在此输入图像描述

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

spannable.setSpan(new RelativeSizeSpan(0.75f), spannable.length() - 1, spannable.length(), 0);
Run Code Online (Sandbox Code Playgroud)

但是,只应用了一种格式 - 使用SpannableStringBuilder时,只有"m"更小,而对整个文本使用一个SpannableString时,只有"s"更小.

调试还显示Spannables似乎只包含一个RelativeSizeSpan实例,这意味着一个类型只能有一个Span.这是真实的还是预期的行为?是否建议连接TextViews?

编辑:顺便说一下,我试图在这里删除HTML.fromHtml()调用性能原因(许多GC调用).

Nor*_*man 105

如果您仍在寻找答案,我可能会有一个解决方案.我有类似的问题.我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));
Run Code Online (Sandbox Code Playgroud)

  • 另请注意,如果没有“textView.movementMethod = LinkMovementMethod.getInstance()”,“ClickableSpan”将无法工作 (2认同)

gbe*_*ero 13

您不需要2个单独的SpannableString.更短的解决方案可以是:

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);
Run Code Online (Sandbox Code Playgroud)