[英]Android Text with Spannable image on top/bottom of text
我正在开发一个简单的灵修应用程序,该应用程序具有要显示的卡纳达语(印度语)。 我成功使用了字体并显示了内容。
在几个地方,我有一个单词,单词的顶部/底部都有一条线,如下所示。 我尝试使用可扩展的图像,但是仍然无法正确实现它。
这是我所引用的代码示例。 在这里,我使用一个小图标在字符串之间显示它。
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);
ImageSpan
扩展了ReplacementSpan
因此您要跨接的任何字符都不会被渲染,因为TextLayout
期望跨度本身将完成所有渲染。
我建议您实现自己的ReplacementSpan
子类。 因为看起来您的图形与一个字符相关联,所以您应该包装单个字符。
在getSize
覆盖中,您将使用start
和end
来索引text
并获取要跨越的字符,然后使用paint.getTextBounds()
来测量文本的宽度并返回该值。 您希望宽度计算以某种方式起作用,即跨度的宽度不影响文本的默认间距。
此方法可能需要做的另一件事是通过增加上升和下降来更改FontMetrics
,以便给您一些空间来绘制线条。
在draw
替代中,您可以使用paint
来呈现未在跨度内呈现的文本。 绘画和字体指标应该已经具有适当的值,以便您的文本呈现看起来像周围的文本。 当然,您还将渲染所需的线图形。
对于一些示例代码,请看一下我对类似问题的回答 。 这包含了我刚才讨论的所有内容。
如果要我为此编写一些代码,则需要提供一些代码,让我从实际的卡纳达语文本以及行的含义和行进位置着手。 我什至不知道卡纳达语文字是LTR还是RTL。 这可能会影响span子类的编码方式。 文字最好与您发布的图像相对应,以便我可以看到其工作时的外观。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.