Paint.breakText()计算字形,而不是字符

时间:2013-12-03 01:32:45

标签: android ligature

我们的一位开发人员遇到了Paint.breakText()(其中表示计算“字符”)的问题实际上是在计算字形。

想象一下,你只包裹一个单词"fit"。它将适合该行,因此您希望breakText()返回3.在某些设备上,它会;在其他人身上,“fi”形成一个连字,breakText()返回 2 。这导致你画画

fi
t

......这不是你想要的!

有吗

  1. make breakText()的标志是否计算Java字符,而不是字形?或
  2. 检测"fi"将被视为单个字形的方法是什么?

2 个答案:

答案 0 :(得分:2)

这似乎有些次优,但我们处理它的方式是使用paint.breakText("fit", true, 1000, null) == 2作为bugExists标志,然后使用measureText()检查结果。

答案 1 :(得分:0)

我在这里找到了如何做得好:Android: is Paint.breakText(...) inaccurate?

我的代码是:

on 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);
    }
}

这只是将文本分成2行,用空格剪切字符串。 希望它有所帮助。