仅在文本本身上设置背景颜色的TextView

9

如何实现这样的效果:

enter image description here

我想在一个文本视图中完成这个效果,但是设置文本视图的背景颜色并不能完成任务。

我猜可以通过Spannable实现,但是我不知道怎么做。

在HTML中,我会这样做:

<html>
<body>
        <span style="background:#CCCCCC;">first line <br /> second long line </span>
</body>
</html>

但我不知道如何在Android上实现这一点。 最后一个选项是将文本分成两个文本视图,然后将每个文本视图的背景颜色和宽度/高度设置为wrap_content。但由于文本长度/单词数量可以动态地改变,因此我需要计算每个单词的长度等。肯定有更好的方法 :)

1个回答

14

这样的东西应该能胜任工作

String myString = "first line\nsecond long line";
Spannable spanna = new SpannableString(myString);
spanna.setSpan(new BackgroundColorSpan(0xFFCCCCCC),0, myString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);           
myTextView.setText(spanna);

如果您想保留HTML格式,可以使用WebView将其加载,在那里进行样式设置应该会更容易,我认为。


1
这正是我正在寻找的!谢谢!您有什么想法如何向BackgroundColorSpan添加某种填充吗? - sockeqwe
@sockeqwe,你成功解决了如何给Spannable添加填充的问题吗? - Tinashe
不,仍然使用空格。 - sockeqwe
有没有办法只针对单词获取背景,而忽略空格?比如说,我不想将“second long line”作为一个整体来设置背景颜色,而是想将其拆分成“second”、“long”和“line”三个单词。 - ansh sachdeva
据我所知,您需要为每个单词设置可扩展文本。例如,您可以按空格拆分字符串,然后为每个单词创建一个可扩展文本,并将其附加到TextView,然后附加一个没有可扩展文本的空格。 - lelloman
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接