在TextView中查找单个Character的精确坐标

时间:2013-08-15 16:36:39

标签: android android-canvas textview android-screen

目前我在迭代TextView文本的副本时使用paintObject.measureText(textCopy.substring(0,i))。例如,measureText("abc".substring(0,1))将给出相对x坐标'b'。我从layout.getLineTop()获得的 y 坐标。这对非等宽字体的 x 坐标有效,但不准确。我可以稍微校准一下,但在每个设备上它的工作方式不同。

我能想到的最好的解决方案是覆盖负责在屏幕上绘制TextView的类,并希望获得绘制到屏幕上的每个角色的坐标。

有谁知道我需要覆盖什么类才能完成此任务?或者其他一些创意解决方案?

2 个答案:

答案 0 :(得分:8)

好吧,这似乎是Paint.measureText()或其他更深层次的错误。但我最终找到了解决方法:

layout.getPrimaryHorizontal(int offset)

这很容易。您只需使用其使用的文本长度迭代布局。

它将返回行位置的字符REGARDLESS的x。所以我仍然从layout.getLineTop()获得了这些线条。顺便说一句,如果您使用layout.getLineTop(),请注意有一些奇怪的行为,可能是一个错误。我已提交错误报告here

答案 1 :(得分:0)

这是有关如何获取特定字符的xy坐标的完整代码。 offsettextView文本中所需字符的索引。这些坐标是相对于父容器的

Layout layout = textView.getLayout();
if (layout == null) { // Layout may be null right after change to the text view
    // Do nothing
}

int lineOfText = layout.getLineForOffset(offset);
int xCoordinate = (int) layout.getPrimaryHorizontal(offset);
int yCoordinate = layout.getLineTop(lineOfText);