gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:04:33 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

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

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

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

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

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

关于java - Android 文本,文本顶部/底部带有 Spannable 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41394180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com