如何测量 SpannableString 的高度?

3

我有一个 TextView,其中我显示了不同 Span 大小的 SpannableString。我需要知道 SpannableString 中最后一个单词的准确高度,但是我使用的方法得出的结果是错误的。我做错了什么?

这是我正在使用的测试代码

    SpannableStringBuilder spannableString = new SpannableStringBuilder("Some Text Some Text Some Text Some Text Some Text Some Text Some Text Some Text Some Text");
    spannableString.setSpan(new AbsoluteSizeSpan(10, true), 0, spannableString.length() / 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableString.setSpan(new AbsoluteSizeSpan(15, true), spannableString.length()/3, 2 * spannableString.length()/3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableString.setSpan(new AbsoluteSizeSpan(20, true), 2 * spannableString.length() / 3, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    surfaceView.setTranslationY(measureSpannableHeight());

private int measureSpannableHeight() {
    StaticLayout staticLayout = new StaticLayout(spannableString, new TextPaint(), 480, Layout.Alignment.ALIGN_NORMAL, 1, 0, false);
    return staticLayout.getHeight();
}
< p >(SurfaceView的翻译仅用于说明measure方法的高度结果)< /p >
1个回答

0
构建一个画笔对象,并在将等效跨度属性设置为画笔后,您可以使用以下方法测量单词高度。
Paint mTextPaint = new Paint();
mTextPaint.setTextSize(20) // your span size
mTextPaint.setTypeface(typeface)

这个矩形将保存单词的尺寸

Rect textBounds = new Rect();

int startIndex = spannableString.length() - 4; //length of your last word as start and end indices.
int endIndex = spannableString.length();
mTextPaint.getTextBounds(spannableString, startIndex, endIndex, textBounds); 

int height = textBounds.height();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接