这似乎是一个基本问题,但是我在SO上找不到类似的问题。在阅读文档时,我很难理解这些概念。我想了解有什么区别之间top
和ascent
,也bottom
和descent
。基线到底在哪里?您有图表来帮助我对其进行可视化吗?
Answers:
首先让我们回顾一下文档中所说的内容:
注意,基线是前四个度量的基准。它是线构成基础的文本坐,即使有些字符(比如,收率,J等)可能有走线以下的部分。它可与您在带衬线笔记本中书写的行相媲美。
这是一张有助于可视化这些东西的图片:
请记住,在Java和Android的画布上绘制时,下降是y的增加,上升是y的减少。这意味着FontMetricstop
和ascent
是负数,因为它们是从基线开始测量的(而下降和底部是正数)。因此,要获得top
到bottom
您的距离,您需要做(bottom
- top
)。
的领先是一条线的底部和下一行的顶部之间的距离。在上图中,它是第1行的橙色和第2行的紫色之间的空间。如下面的@MajorTom所述,在印刷术中,该术语更恰当地定义为“连续的类型的基线之间的距离”。*但是,Android似乎更具有历史意义。这个单词(发音为“ ledding”)来自铅字带,旧的排字员习惯将铅字带放在字体之间。基本上,这只是一种调整行距的方法。在Android中,我从来没有真正看到领先者是0
而且我还没有在源代码中看到它用于任何用途。(纠正我,如果你知道它是用来计算任何东西。)你可以改变的行距TextView
与setLineSpacing
代码或android:lineSpacingExtra
和android:lineSpacingMultiplier
XML格式。但是,这些方法不使用或修改引导。
查看这些链接以获取更多信息:
top
和bottom
)为了进一步探索Font Metrics,我做了一个简单的项目。
而不是在这里列出所有代码。我将项目添加到GitHub。您可以克隆项目,也可以将以下文件复制到新项目中。
top
还是下方bottom
?通常不,但是他们可以。据我所知,顶部和底部是由字体设置的(因此称为“ FontMetrics”),因此字体制造商可以使字形高于其所说的顶部(或低于底部)。同样,通过在Unicode中组合变音标记,它可以很容易地发生。这是一个极端的例子(取自此处):M̵̳̙͔̟̱͕̓̀̄̉̅ͧ̋͊͌͑́͌ͪ̒̿̀̚a͔̟̝͔ͥ̈́̏ͮͯ̇͆¿̒ͦͦ͘͢͜y̵̴̢͕̝̩̱͈͕̼̣͕̟̌͗̾ͤ̎͌̄ͣͨ͊ͬb̡̯̰̪̜͙̟̝̠͚̜̥̙̤̃ͨ̋̒̒ سͧͤ͐̓͋̌̾̇̔̈̀̀
将字符串插入Android,我们得到以下信息:
变音标记位于的上方top
和下方bottom
。有趣的是,总宽度和高度由文本边界正确测量。
无论如何,出于编程中的所有实际目的,您可以仅假定字形字母的max和min为top
和bottom
。通常,它们会留在ascent
和内decent
。如果由于任何原因您需要确定字母是否超出范围top
或bottom
可以使用TextPaint.getTextBounds
。
Top
?有没有足够高的字母可以碰Top
线?例如,“ M”,“ l”似乎是最高的字母。他们都没有感动Top
。
排版中的行之间不能有空格。显然这是Android代码未考虑的问题。我们自己一直在为此奋斗。领导的正确定义(来自维基百科):
在排版中,前导/ ˈlɛdɪŋ /指的是连续类型的基线之间的距离。该术语起源于手工排版的日子,当时将细铅条插入表格中以增加字体之间的垂直距离。
据我所知,Android无法指定此方法。
setLineSpacing
代码或android:lineSpacingExtra
和android:lineSpacingMultiplier
XML格式。
android:lineSpacingExtra
它将在线之间的实际空间之间进行测量。它不是领先的,但似乎是管理间距的唯一方法。这是一个问题,因为排版中没有这种度量,也没有这样的方法可以在Sketch或Zepelin(我们使用的工具)中指定该度量。另外,它与领先者不符。