TextSize和LineSpace如何影响ImageSpan

时间:2017-01-16 07:02:26

标签: android imagespan staticlayout

我想用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是什么,它总是返回相同的值。但是行空间会影响。

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

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

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

0 个答案:

没有答案