我们的一位开发人员遇到了一个问题,其中Paint.breakText()
(它说它计算“字符”)实际上是计算字形。
想象一下,您只包装了一个单词"fit"
。它将适合在线,因此您希望breakText()
返回 3。在某些设备上,确实如此;在其他人身上,“fi”形成一个连字,并breakText()
返回2。这导致你画
fi
t
...这不是你想要的!
有没有
- 计数 Java 字符而不是字形的 标志?
breakText()
或者 - 一种检测方法
"fi"
将被视为单个字形?
这似乎不是最理想的,但我们处理它的方式是paint.breakText("fit", true, 1000, null) == 2
用作bugExists
标志,然后用于measureText()
检查结果。
我在这里找到了如何做好:Android: is Paint.breakText(...) inaccurate?
我的代码是:
在 onCreate 上:
paintOfText.setSubpixelText(true);
breakTextNumber = paintOfText.breakText(textToBreak, true,
maximumSizeOfText, null);
在渲染类上:
if (breakTextNumber < textToBreak.length()) {
while (textToBreak.charAt(breakTextNumber) != ' ') {
breakTextNumber--;
}
myCanvas.drawText(textToBreak.substring(0, breakTextNumber),
placeToDrawX, placeToDrawY, paintOfText);
myCanvas.drawText(
textToBreak.substring(breakTextNumber+1),
placeToDrawX, placeToDrawY2,, paintOfText);
}
}
这只是将文本分成两行,用空格切割字符串。希望能帮助到你。