【问题标题】:Get bounds of untrimmed string获取未修剪字符串的边界
【发布时间】:2014-06-28 20:52:39
【问题描述】:

在我正在开发的应用程序中,我正在尝试使用 Paint 在 Canvas 上绘制一些文本。为此,我使用:

String string = " a ";
Rect bounds = new Rect();
mPaint.getTextBounds(string, 0, string.length(), bounds);

问题是,这给了我“a”的界限,而不是“a”的界限。它会删除 a 之后的空格,但我不希望它这样做。

有谁知道我如何获得包括字母后空格在内的文本边界?

**编辑:**

我找到了解决方法:

String string = " a ";
Rect bounds = new Rect();
mPaint.getTextBounds(string, 0, string.length(), bounds);
float width = mPaint.measureText(string);
float height = bounds.height();
RectF boundsF = new RectF(x, y, x + width, y + height);

问题在于 getTextBounds() 是一种删除所有后沿空格的本机方法。 Paint.measureText(String string) 不这样做,所以我们可以使用这个宽度。

【问题讨论】:

  • 您是否尝试过将“ ”字符临时替换为其他字符,例如“_”(下划线)
  • 是的,如果我这样做,它会显示下划线:)

标签: android string space trim


【解决方案1】:

来自文档

参数: 文本字符串来测量并返回其边界

要测量的字符串中第一个字符的起始索引

结束 1 超过字符串度量中的最后一个字符

bounds 返回所有文本的联合边界。必须由调用者分配。

Ref

所以我认为你需要打电话,

mPaint.getTextBounds(string, 0, string.length()+1, bounds);

【讨论】:

  • 不,string.length() + 1 太长(给出异常)。此外,如果我用下划线替换空格字符(如 Ani Fichadia 建议的那样),即使我使用的是 string.length() 而不是 string.length() + 1,它也会显示它们(也在字母之后)。:)
  • 问题是,我已经在 src 代码中跟踪了这个方法,它只是调用了一个本地方法......所以我认为修剪最后一个空间的本地方法?!
猜你喜欢
  • 2016-04-07
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多