Android布局:getLineBaseline,getLineDescent,getLineAscent,getLineBottom,getLineTop

时间:2017-04-29 03:07:40

标签: android fontmetrics staticlayout dynamiclayout

Layout(包括StaticLayoutDynamicLayoutBoringLayout)的以下方法的文档非常简洁。

这些方法返回的确切数字是多少?它们是正常的字体指标值还是布局上的位置?

我做了一个测试项目,所以我在Q& A风格下面发布了我的答案。

1 个答案:

答案 0 :(得分:0)

我之前已经介绍了meaning of top, ascent, baseline, descent, bottom, and leading in Android's FontMetrics

因为Layout方法getLineBaselinegetLineDescentgetLineAscentgetLineBottomgetLineTop听起来与{{1}非常相似名字,很容易让他们感到困惑。但是,他们报告了两种不同类型的东西:

这些方法在布局 上返回其垂直位置,这对于每一行都是不同的。

  • FontMetrics
  • getLineBaseline
  • getLineBottom

但是,以下两种方法会返回它们所在的的值,无论该行在布局中的位置如何。因此,除非有特殊的跨度影响大小,否则它们对于每一行都是相同的。

  • getLineTop
  • getLineAscent

演示

我做了一个简单的项目来证明上面的信息。 getLineDescent中有六行文字。单击该按钮会记录每行的信息。

enter image description here

<强>结果

以下是记录的结果:

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值。 在线上升是从基线到其上方线的底部的距离。下降是从基线到下一行顶部的距离。

在源代码中,每行只保存FontMetricstop。其他值由它们计算:

  • bottom =下一行的顶部
  • baseline = bottom - descent
  • ascent = top - (bottom - descent)

项目代码:

descent

另见