1

我想用 StaticLayout 测量 ImageSpan。为此,我使用如下简单代码:

SpannableStringBuilder content = new SpannableStringBuilder();
Spannable imageSpannable = getImageSpannable();
content.append(imageSpannable);

StaticLayout layout = new StaticLayout(content, txt.getPaint(), txt.getWidth(), Layout.Alignment.ALIGN_NORMAL, 1, lineSpace, false);

txt 是一个 TextView 和 lineSpace 只是一个指示 txt 行空间的变量。

和getImageSpannable:

private Spannable getImageSpannable() {
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.some_image);

    Drawable drawable = new BitmapDrawable(getResources(), bitmap);
    drawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());

    Spannable imageSpannable = new SpannableString("\uFFFC");
    ImageSpan imgSpan = new ImageSpan(drawable, DynamicDrawableSpan.ALIGN_BOTTOM);

    imageSpannable.setSpan(imgSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    return imageSpannable;
}

当我将 ImageSpan 添加到 SpannableStringBuilder(仅此而已)时,TextSize 似乎不会影响 ImageSpan。我的意思是当我调用 layout.getLineBottom(0) 时,无论 TextSize 是什么,它总是返回相同的值。但是行距会影响。

但是当我在 ImageSpan 到 SpannableStringBuilder 之后添加“\n”和另一个字符串(如“sample”)时,TextSize 也会影响 ImageSpan 的高度。在这种情况下,ImageSpan 的上边距等于:(lineSpace + TextSize/2)。

有人可以解释 ImageSpan 的确切行为,因为我必须单独测量 ImageSpan 并连接到结果。

我应该如何测量 ImageSpan 以便 ImageSpan 的高度在组合到其他字符串甚至其他 ImageSpan 后不会改变?

4

0 回答 0