构建占据容器整个宽度的自定义跨度

时间:2016-03-30 05:35:42

标签: android spannablestring spannable

我需要创建一个自定义Span来呈现其内容,如源代码。这是我想要实现的一个例子。假设我们有以下文本,其中我使用方括号注释了自定义范围的开头和结尾:

Some text [some\nmulti line\ntext] some more text

前缀(“Some text”)和后缀(“some some text”)应该正常呈现,但自定义span应该像代码块一样呈现:

some
multi line
text

我一直在考虑使用ReplacementSpan,因为我以前用它来创建各种有趣的自定义跨度,但对于这种情况,我无法让它做我想要的。

我需要让我的跨度来渲染完整的图形块,占据容器的整个宽度。甚至可以这样做吗?

1 个答案:

答案 0 :(得分:0)

Android处理多行跨行。 我发现的唯一方法是覆盖TextView.onDraw,为每个块跨度组成块,然后在TextView.onDraw之前(如果需要,则在之后)绘制它们。

这里是一个示例活动 https://github.com/Babay88/AndroidCodeSamplesB/blob/master/blockquotespanexample/src/main/java/ru/babay/blockquotespanexample/MainActivity.java

它使用定制的TextView https://github.com/Babay88/AndroidCodeSamplesB/blob/master/blockquotespan/src/main/java/ru/babay/blockquotespan/TextViewWithBlockBackgrounds.java

还有特殊的BlockQuoteSpan。

您应确保每个块跨度以\n开始和结束。