Sur*_*gch 81 android fontmetrics
这似乎是一个基本问题,但我在SO上找不到类似的问题.在阅读文档时,我无法理解这些概念.我想了解有什么区别之间top
和ascent
,也bottom
和descent
.基准到底在哪里?你有图表来帮我形象化吗?
Sur*_*gch 248
我们先来看看文档说的内容:
请注意,基线是前四个测量的基准.它是形成文本所在基础的线,即使某些字符(如g,y,j等)可能包含在线下方的部分.它与您在笔记本电脑上书写的线条相当.
这是一张图片,以帮助可视化这些事情:
请记住,在Java和Android的画布上绘图时,下降是y 的增加,而上升是y 的减少.这意味着,FontMetrics对象top
和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̡̯̰̪̜͙̟̝̠͚̜̥̙̤ͨ̋̒̒̊ͧͤ͐̓͋̌̾̇̔̈͡͠e̵ͯͪ̿̿̄ͫ҉͏͎̣̹̜͉̦̞̪̘̠̝̝͍̼̜̖̥̭̣̞͙͚̝̰̞̹̗̣͙͍͍̓͊̋ͣ̏̑̍̊͌ͩ͐ͣͣ̚͟͟h̛͋̏̍̆ͤ͛͐ͨ̌̋ͤͨ̓̑̚̕͟͏̻̣͖̖͚͚͓̼̪ȁ̔̅̿͐̑͡͏̝͓̮͚̘̦̰͚͎͔͉͚̮̠̕͜ṱ̼̖̓ͭ̏̅ͥ͌ͯ͌͠sͪ̓ͪ̄̌̓ͧ͋͐ͬ̅̑҉̨̡̪̬͎͍̥̬̮̳͙͓͔̹̘̹͓̘̻̦̣͎̫̐ͤ̐͛͝帽子̶̨̡͇͚̙͚̭̣̳̤̞̫̗̣̦̮̖̞͒͆̿̄͑
将该字符串插入Android我们得到这个:
变音符号高于top
和低于bottom
.有趣的是,总宽度和高度可以通过文本边界正确测量.
无论如何,对于编程中的所有实际目的,您可以假设字形字母的最大值和最小值为top
和bottom
.他们通常会留下中ascent
和decent
.如果出于某种原因,您需要确定这些字母是否超出top
或者bottom
您可以使用TextPaint.getTextBounds
.
归档时间: |
|
查看次数: |
35897 次 |
最近记录: |