2013-04-28 136 views
1

根据Andorid api参考,Textpaint.breakText(String text,boolean measureForward,float maxWidth,float [] measuredWidth)返回测量的字符数。将始终是< = abs(结束 - 开始)。现在我想打破“交通”(其中有7个字符),以测试它的返回值:Textpaint.breakText的返回值

int cnt = mTextPaint.breakText("Traffic", true, 10000, outMeasuredWidth) 

在我看来,这应该返回7,但实际上它返回6.为什么6除了7?谢谢。

+0

尝试'mTextPaint.setSubpixelText(真);' – wangyif2 2013-04-28 05:40:57

回答

3

原因是因为“交通”一词中的“fi”被视为一个单位或字形。当你的字体使用ligatures时就是这种情况。

与Paint.breakText()的API参考中提到的相反,该方法计算字形而不是字符。

我会建议使用没有连字的字体或使用measureText()来确定字符数。

有一个错误提交,但修复尚未完成。

参考文献:

Paint.breakText() counts glyphs, not characters

https://code.google.com/p/android/issues/detail?id=39365