Android Monospace 不像固定间距

Android Monospace doesn't behave as a fixed-pitch

正如您在下面的屏幕截图中看到的,在 canvas 上绘制的两个长度相同但宽度不同的字符串却不同。我用的是 monospaced 字体,那不是保证画成一样的宽度吗?是因为字距调整吗?

Typeface.create(Typeface.MONOSPACE,Typeface.NORMAL)

这是 well-known Android 上 monosapce 字体的字距调整问题。看起来这是一个相当古老的话题。

有些人已经遇到过这个问题:

Android Monospace fonts aren't fixed width - 2013-06-11

Are Android monospace fonts actually fixed size? - 2016-06-22

Android monospace space ( ) width is different than character width - 2017-03-02

该问题也发生在移动网络环境中:

Font monospace Android 2.3 - 2013-07-11

用缺失字形解释问题的地方:

https://github.com/googlefonts/noto-fonts/issues/617

解法:

选项 1.:

寻找替代 fixed-width 字体可能是最简单的方法。找到一些有用的链接:

选项 2.:

您可以使用 Spans 覆盖文本绘制。这个 post 可以帮助你:

选项 3.:

您可以修改等宽字体文件来修复字距。这个在线工具很有用: http://www.glyphrstudio.com/online/