BackgroundColorSpan 调整高度或为其添加填充

Ram*_*ain 8 android ebook-reader textview spannablestring

我有一个应用程序,我在TextView. 我正在SpannableStringBuilder为此目的使用。

我想在这里做的一件事是能够突出显示文本。现在我尝试使用BackgroundColorSpan,但在这种情况下,文本上的背景覆盖了完整的行高。我希望它只覆盖文本。似乎没有明显的方法可以在此跨度上设置垂直填充或高度。只是颜色。

其次,我还尝试通过在该类的draw方法中绘制来子类化ReplacementSpan并实现backgroundSpan我自己的a 。但这似乎不支持多行突出显示。

谁能告诉我如何实现这种突出显示功能?基本上,我希望它像一个电子书阅读器的工作,最好的Kindle或默认的电子书阅读器Android

小智 1

您可以实现 LineBackgroundSpan 并覆盖:

drawBackground (Canvas c, Paint p, int left, int right, int top, int Baseline, int Bottom, CharSequence text, int start, int end, int lnum)

您可以修改“顶部”和“底部”参数来指定为给定线条绘制的背景的高度。“基线”参数是所有字符所在行的 y 坐标(请注意,字母 g、p、j 等的某些部分低于基线)。

此方法适用于显示屏上给定文本的每一行。例如,如果文本

"this is an example , blah, blah .." 
Run Code Online (Sandbox Code Playgroud)

跨越显示器上的 3 行,然后应用drawBackground(...) 三次,如果您只想更改跨度中某些行的高度,则可以使用“lnum”参数来更改某些行的行为。