使用特定字符时,字体会被截断

5
我正在开发一个应用程序,在其中必须使用此 TFF 文件中提供的字体,并且在此字体中使用Unicode 字符 2019会破坏应用程序中的文本。我不确定这是字体问题还是 Android 问题,但我们的 iOS 团队没有遇到同样的问题,而且我对字体了解不够,无法深入挖掘 .tff 文件,所以来问这里。
  • 如果应用启动后首屏显示该字符,则某些字符的基线会向上移动并被完全裁剪。
  • 这就为应用程序设置了先例,即每个后续看到的屏幕都会被裁剪其文本,即使它不包含该字符。
  • 但是,如果应用启动后首屏不包含该字符,则之后显示的任何屏幕看起来都很好 - 即使它们包含该字符。

我在一个简单的示例应用程序中复制了此问题,除了应用字体并设置包含字符的一些文本之外,没有特别操作。此问题会出现在基于 XML 的视图以及 Jetpack Compose 中,但是上述“先例”对每个实现都是唯一的(即如果首先看到包含文本的 Compose 屏幕,则它将破坏所有后续的 Compose 屏幕,但不会影响 XML 屏幕,反之亦然)。

以下是使用 U-2019(波浪撇号)与使用 U-0027(普通撇号)在“I've”中呈现文本时的示例:

U-2019 Compose(裁剪) U-2019 XML(裁剪)
enter image description here enter image description here
U-0027 组成(好) U-0027 XML(好)
输入图像描述 输入图像描述

那么在 .tff 文件中这个特定字符是否有问题?Android框架是否存在无法处理该字符的错误?还是其他原因?

2个回答

0

我记得在工作中使用Macron或其他毛利词的特殊字符时发生过这种情况。如果我没记错,我们最终只是为这些部分使用了不同的字体。


是的,更改字符是我们的最后手段,我们只想先尽可能地尝试所有选项。 - Tommy Jackson

0

我下载了FontForge来进一步检查字形,发现U+2019的字形是一个复合字形,参考了逗号而不是自己绘制字形。

在字形表中,我可以右键单击U+2019并选择“取消链接引用”,这将强制该字符绘制自己的字形。

Dropdown menu for right clicking a glyph

在保存和导出字体并将其导入到我的Android项目后,剪切问题不再存在!我仍然不确定处理复合字形的Android框架是否存在错误,或者复合字形本身是否存在一些错误数据,但无论如何,让它自己绘制字形肯定解决了我的问题!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接