我有一个多语言项目(目前有 13 种语言),它使用“Helvetica Neue”的许多不同字体变体,大部分是来自 LinoType Pro 字体集(包括西欧字符)的粗体、压缩和常规剪切,并且对于西里尔。我们将来可能会添加中文和日文版本。
我已经将项目设置为使用不同的 CSS 样式表,并根据用户选择的语言分别加载每个版本的字体,因此我可以使用不同的行高、字距调整和/或字体大小,以使所有内容保持原始外观,即使字体看起来一点也不相似。
所有这些都运行良好,除了一个问题:由于某种原因,所有西里尔字母似乎都被替换了。它们出现在正确基线下方 2-3 个像素处,并且实际上突出于文本字段的底部边框,即使该字段设置为自动调整大小也是如此。当我使用 textfield.getCharBoundaries()
时,所有值似乎都是正确的,即使它们显然没有正确呈现。
为了使一切看起来整洁,我当然可以根据语言和字体大小手动向上或向下移动所有有问题的文本字段,但我想知道是否有某种方法可以防止或至少检测这种位移,以便自动处理调整 - Flash Player 应该有一些关于如何渲染事物的信息,不是吗?你们中有人遇到过类似的问题吗?或者更好的是:解决方案?
最佳答案
我在中文中遇到了这个问题,但仅限于 OS X 和 Windows。我也不知道如何自动获取角色实际位置的正确指标。我最终得到了一个粗略的函数,每当我设置 TextField 时都会调用它:
public static function adjustPositioning(field:TextField):void
{
if(OS != "MAC") return;
var fontSize:int = field.defaultTextFormat.size as int;
field.y += fontSize/5;
}
我在代码中而不是 IDE 中设置了所有文本字段,因此这很容易。不过,我想这不是您正在寻找的解决方案!
关于actionscript-3 - 如何防止某些外语字体的文本位移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4583709/