这似乎是一个基础问题,但我在stackoverflow上找不到类似的问题。在阅读文档时,我很难理解其中的概念。我想了解
top
和ascent
之间的区别以及bottom
和descent
之间的区别。基线究竟在哪里?你有一张图能帮助我形象化地理解吗?top
和ascent
之间的区别以及bottom
和descent
之间的区别。基线究竟在哪里?你有一张图能帮助我形象化地理解吗?首先让我们回顾一下文档中的内容:
请注意,Baseline 是从这四个指标中测量的。它是线,形成文本所在的基准线,即使某些字符(如 g、y、j 等)可能有部分在该线下方。它类似于你在线条笔记本上写的线。
以下图片可帮助您更好地理解这些内容:
请记住,在Java和Android中绘制画布时,向下是y的增加,向上是y的减少。这意味着FontMetrics的顶部和上升是负数,因为它们是从基线测量的(而下降和底部是正数)。因此,要获取从顶部到底部的距离,您需要执行(bottom - top)。Leading是指一行文字底部到下一行文字顶部之间的距离。在上面的图片中,它是第1行橙色和第2行紫色之间的空间。正如@MajorTom所注明的,排版术语更准确地定义为“连续排列的文本基线之间的距离。”* 然而,Android似乎更多地使用历史意义上的术语。这个词(发音为“ledding”)来自于旧的排字工人在排版时放置在文本行之间的铅条。它基本上只是一种调整行间距的方法。在Android中,我从未看过行间距不是0
,也没有在源代码中看到它被用于任何事情。(如果您知道它用于计算任何内容,请纠正我。)您可以在代码中使用setLineSpacing
或在xml中使用android:lineSpacingExtra
和android:lineSpacingMultiplier
来更改TextView
的行间距。然而, 这些方法并不使用或修改leading。
查看以下链接以获取更多信息:
top
和bottom
)不要在这里列出所有代码。我已经将项目添加到GitHub。您可以克隆该项目,或将以下文件复制到新项目中。
top
或低于bottom
吗?top
and below the bottom
. It is interesting to note that the total width and height are correctly measured by the text bounds, though.top
and bottom
. And usually they will stay within ascent
and descent
. If for whatever reason you need to know for sure if the letters go beyond top
or bottom
you can use TextPaint.getTextBounds
.据我所知,Android没有指定此选项的方法。
setLineSpacing
,或者在 xml 中使用 android:lineSpacingExtra
和 android:lineSpacingMultiplier
。 - Suragchandroid:lineSpacingExtra
,它会在实际行间距之间放置一个测量值。这不是行距,但似乎是管理间距的唯一方法。这是一个问题,因为在排版中没有这样的测量值,并且在我们使用的Sketch或Zepelin工具中也没有指定该测量值的方法。此外,它与行距不匹配。 - MajorTom