我想用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组合后不会改变?