Android 线条空间如何影响单行文字中的静态布局高度

Android 线条空间如何影响单行文字中的静态布局高度,android,staticlayout,Android,Staticlayout,考虑这个简单的例子: 我有这样一行文字:“你好” 我想用StaticLayout来测量这个文本。所以我写了这样的东西: StaticLayout layout = new StaticLayout("Hello", myTextView.getPaint(), myTextView.getWidth(), Layout.Alignment.NORMAL, 1, lineSpace, false); if (Build.VERSION.SDK_INT >= Build.VERSION_CO

考虑这个简单的例子:

我有这样一行文字:“你好”

我想用StaticLayout来测量这个文本。所以我写了这样的东西:

StaticLayout layout = new StaticLayout("Hello", myTextView.getPaint(), myTextView.getWidth(), Layout.Alignment.NORMAL, 1, lineSpace, false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    // in this version StaticLayout don't consider line space for last line
} else {
    // in this version StaticLayout consider line space for last line
}
在上面的代码中,我更改了for循环中的lineSpace变量,并每次记录布局的高度:

for(int lineSpace=0; lineSpace<20;lineSpace++){
    StaticLayout layout = new StaticLayout("Hello", myTextView.getPaint(), myTextView.getWidth(), Layout.Alignment.NORMAL, 1, lineSpace, false);

    Log.d("TAG", "layout height: " + layout.getHeight());
}

我在源代码中做了一些快速挖掘,似乎这就是罪魁祸首:

    if (needMultiply && !lastLine) {
        double ex = (below - above) * (spacingmult - 1) + spacingadd;
        if (ex >= 0) {
            extra = (int)(ex + EXTRA_ROUNDING);
        } else {
            extra = -(int)(-ex + EXTRA_ROUNDING);
        }
    } else {
        extra = 0;
    }
旧版本缺少
!最后一行
条件,从而也将间距添加到最后一行

如果我的github foo没有让我失望,那么从Android 5开始就应该包括这个条件


显然,就像提交提到的那样,这只影响单行文本,对于多行文本,高度的计算似乎是正确的。因此,一个简单的解决方法可能是检查文本是否只有一行(使用getLineCount()),以及Android版本是否小于5,如果是,则减去一次行距。

我对Android 5表示怀疑,但行数似乎不会影响最后一行的额外空间。我已经做了一些测试。似乎从Android 5开始的行空间并没有考虑到最后一行。谢谢,我在下面的链接中发布了一些关于ImageSpan和StaticLayout的问题,但还没有人回答我。如果你不介意的话,请看看这些问题:还有这个: