使用带有字体的特定字符时文本被截断

Tom*_*son 5 fonts android character

我正在开发一个应用程序,我必须使用此 tff 文件中提供的字体,并且将unicode 字符 2019与此字体一起使用会破坏应用程序中的文本。我不确定这是字体问题还是 Android 问题,但我们的 iOS 团队没有遇到同样的问题,而且我对字体了解不够,无法.tff自己深入研究该文件,所以我在这里。

  • 如果应用程序启动后显示的第一个屏幕包含该字符,则某些字符的基线会向上移动,并且它们的顶部会完全被切断。
  • 这为应用程序开创了先例,之后看到的每个屏幕都会被截断其文本,即使它不包含该字符。
  • 但是,如果应用程序启动后显示的第一个屏幕不包含该字符,则之后显示的任何屏幕都会看起来很好 - 即使它们具有该字符。

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

以下是在“Ive”中使用 U-2019(波浪撇号)与使用 U-0027(普通撇号)时的文本外观的一些示例:

U-2019 作曲(截止) U-2019 XML(截止)
在此输入图像描述 在此输入图像描述
U-0027 撰写(精细) U-0027 XML(精细)
在此输入图像描述 在此输入图像描述

那么文件中的特定字符有问题吗.tff?Android 框架中是否存在无法处理该角色的绘制方式的错误?还有别的事吗?

Tom*_*son 0

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

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

右键单击字形的下拉菜单

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