本文共 1784 字,大约阅读时间需要 5 分钟。
开发中经常遇到TextView中部分文字加粗或者颜色不同的场景
一般使用SpannableString就能解决。例如:private void testText1(String posName) { String text = "* 为你发布的 " + posName + " 添加一句宣传语吧!"; SpannableString span = new SpannableString(text); span.setSpan(new ForegroundColorSpan(Color.RED), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); span.setSpan(new ForegroundColorSpan(Color.CYAN), 7, 7 + posName.length() + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); span.setSpan(new ForegroundColorSpan(Color.BLACK), text.length() - 5, text.length() - 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); span.setSpan(new StyleSpan(Typeface.BOLD), text.length() - 5, text.length() - 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); tv1.setText(span); /** * 其中最后的参数flag: * Spanned.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含两端start和end所在的端点 (a,b) * Spanned.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含端start,但包含end所在的端点 (a,b] * Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含两端start,但不包含end所在的端点 [a,b) * Spanned.SPAN_INCLUSIVE_INCLUSIVE --- 包含两端start和end所在的端点 [a,b] */ }
效果图如下:
private void testText2(String posName) { String text = "* 为你发布的" + " " + posName + " " + "添加一句宣传语吧!"; tv2.setText(Html.fromHtml(text)); }
效果是这样的:
<b><tt>需要加粗文字</tt></b>
,其他没效果的 private void testText2(String posName) { String text = "* 为你发布的" + " " + posName + " " + "添加一句" + "宣传语" + "吧!"; tv2.setText(Html.fromHtml(text)); }
但是使用TextView.setText(Html.fromhtml(text);有个bug,假如text包含1+1<3
等包含类似html标签的小于号,且没有大于号配对时,会出现文字不全情况。
只是发现了一些可能有用的帖子:
转载地址:http://yevk.baihongyu.com/