Android文本,文本顶部/底部带有Spannable图像

时间:2016-12-30 09:57:04

标签: java android xml

我正在开发一个简单的灵修应用程序,其中包含要显示的Kannada(印度语言)句子。我成功地使用了字体并显示了内容。

在一些地方,我有一个单词,在单词的顶部/底部有一条线,如下所示。我尝试了一个spannable图像,但我仍然无法正常实现它。

这是我所指的代码示例。在这里,我使用一个小图标在字符串之间显示它。

Spannable span1 = new SpannableString("The  imageplace");
Drawable android = TestImageActivity.this.getResources().getDrawable(R.drawable.end);
android.setBounds(5, 0, 20, 5);
ImageSpan image = new ImageSpan(android, ImageSpan.ALIGN_BASELINE);
span1.setSpan(image, 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
tvTextImage3.setText(span1);

small line above and below text

1 个答案:

答案 0 :(得分:0)

ImageSpan扩展ReplacementSpan,因此您正在跨越的任何字符都不会被渲染,因为TextLayout期望跨度本身将执行所有渲染。

我建议您实现自己的ReplacementSpan子类。由于您的图形看起来与一个字符相关联,因此您可以包装单个字符。

getSize覆盖中,您可以使用startend索引到text并获取您正在跨越的角色,然后使用{{1测量文本的宽度并返回该值。您希望宽度计算的工作方式是跨度的宽度不会影响文本的默认间距。

此方法可能需要做的另一件事是通过增加上升和下降来更改paint.getTextBounds(),以便为您提供一些空间来绘制线条。

FontMetrics覆盖中,您使用draw呈现未在范围内呈现的文本。绘制和字体度量应该已经具有正确的值,以便您的文本呈现看起来像周围的文本。当然,您还将渲染所需的线条图形。

对于某些示例代码,请查看my answer to a similar question。这包括我刚刚讨论过的所有内容。

如果您希望我为此编写一些代码,您需要提供一些代码,这些代码为我提供了一些实际卡纳达文本的起点,以及这些行和它们的去向。我甚至不知道Kannada文本是LTR还是RTL;这可能会影响span子类的编码方式。优选地,文本将对应于您发布的图像,因此我可以看到它在工作时的外观。