【问题标题】:How to measure SpannableString height?如何测量 SpannableString 高度?
【发布时间】:2015-10-28 17:30:36
【问题描述】:

我有一个 TextView,我在其中显示具有不同跨度大小的 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的翻译只是为了说明测量方法的高度结果)

【问题讨论】:

    标签: android text spannablestring


    【解决方案1】:

    构造一个绘画对象,在为绘画设置等效的跨度属性后,您可以使用以下方法测量您的字高。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 2012-06-21
      • 2021-05-12
      相关资源
      最近更新 更多