Layout
(包括StaticLayout
,DynamicLayout
和BoringLayout
)的以下方法的文档非常简洁。
getLineBaseline(int line)
getLineDescent(int line)
getLineAscent(int line)
getLineBottom(int line)
getLineTop(int line)
这些方法返回的确切数字是多少?它们是正常的字体指标值还是布局上的位置?
我做了一个测试项目,所以我在Q& A风格下面发布了我的答案。
答案 0 :(得分:0)
我之前已经介绍了meaning of top, ascent, baseline, descent, bottom, and leading in Android's FontMetrics。
因为Layout
方法getLineBaseline
,getLineDescent
,getLineAscent
,getLineBottom
和getLineTop
听起来与{{1}非常相似名字,很容易让他们感到困惑。但是,他们报告了两种不同类型的东西:
这些方法在布局 上返回其垂直位置,这对于每一行都是不同的。
FontMetrics
getLineBaseline
getLineBottom
但是,以下两种方法会返回它们所在的行的值,无论该行在布局中的位置如何。因此,除非有特殊的跨度影响大小,否则它们对于每一行都是相同的。
getLineTop
getLineAscent
我做了一个简单的项目来证明上面的信息。 getLineDescent
中有六行文字。单击该按钮会记录每行的信息。
<强>结果
以下是记录的结果:
EditText
如您所见,顶部,底部和基线是基于线的累积。每条线的上升和下降主要保持不变。对于除第一行之外的所有行,Ascent等于line 0 baseline: 67
line 1 baseline: 140
line 2 baseline: 213
line 3 baseline: 286
line 4 baseline: 359
line 5 baseline: 432
line 0 descent: 15
line 1 descent: 15
line 2 descent: 15
line 3 descent: 15
line 4 descent: 15
line 5 descent: 18
line 0 ascent: -67
line 1 ascent: -58
line 2 ascent: -58
line 3 ascent: -58
line 4 ascent: -58
line 5 ascent: -58
line 0 top: 0
line 1 top: 82
line 2 top: 155
line 3 top: 228
line 4 top: 301
line 5 top: 374
line 0 bottom: 82
line 1 bottom: 155
line 2 bottom: 228
line 3 bottom: 301
line 4 bottom: 374
line 5 bottom: 450
FontMetrics top: -67
FontMetrics bottom: 18
FontMetrics ascent: -58
FontMetrics descent: 15
,其中它等于FontMetrics.ascent
。对于除最后一行之外的所有行,下降等于FontMetrics.top
,其中等于FontMetrics.descent
。
因此, 行的top,bottom,baseline,ascent和descent不应被视为等于相同名称的FontMetrics.bottom
值。 在线上升是从基线到其上方线的底部的距离。下降是从基线到下一行顶部的距离。
在源代码中,每行只保存FontMetrics
和top
。其他值由它们计算:
项目代码:
descent