【问题标题】:Android Text with Spannable image on top/bottom of text文本顶部/底部带有可扩展图像的 Android 文本
【发布时间】:2016-12-30 09:57:03
【问题描述】:

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

在几个地方,我的单词在单词的顶部/底部有一行,如下所示。我尝试了一个可扩展的图像,但我仍然无法正确实现它。

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

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);

【问题讨论】:

  • 我没有得到任何关于如何实现这一点的解决方案,如果有人对此有任何想法,请让他们提供帮助
  • 我需要一个关闭这个问题的理由。
  • 添加代码帮助很大。您能否进一步解释问题所在?似乎您正在尝试使某些文本看起来像图像。您包含的代码不完整,无法生成该文本,并且您没有显示代码结果与您想要实现的结果有何不同。

标签: java android xml


【解决方案1】:

ImageSpan 扩展了 ReplacementSpan,因此您跨越的任何字符都不会被渲染,因为 TextLayout 期望 span 本身将完成所有渲染。

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

getSize 覆盖中,您将使用 startend 索引到 text 并获取您正在跨越的字符,然后使用 paint.getTextBounds() 测量文本的宽度和返回那个值。您希望宽度计算以跨度宽度不影响文本默认间距的方式工作。

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

draw 覆盖中,您使用paint 来呈现未在跨度内呈现的文本。绘制和字体指标应该已经具有正确的值,以便您的文本渲染看起来像周围的文本。当然,你也会渲染你想要的线条图形。

有关一些示例代码,请查看my answer to a similar question。这包含了我刚才讨论的所有部分。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    相关资源
    最近更新 更多