gpt4 book ai didi

android - 如何测量 SpannableString 的高度?

转载 作者:行者123 更新时间:2023-12-05 07:54:04 25 4
gpt4 key购买 nike

我有一个 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();
}

(surfaceview的翻译只是为了说明measure方法的高度结果)

最佳答案

构建一个 paint 对象并为 paint 设置等效的 span 属性后,您可以使用以下方法测量字高。

Paint mTextPaint = new Paint();
mTextPaint.setTextSize(20) // your span size
mTextPaint.setTypeface(typeface)

单词的维度将保存在这个 Rect 中

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();

关于android - 如何测量 SpannableString 的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31840986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com