我有一个 TextView
,使用 android:lineSpacingMultiplier
属性来增加行之间的间距,这个功能运行良好,但是当我在文本中添加一个 ImageSpan
时就不行了。
这会导致图像与行之间的空间底部对齐,而不是文本基线(在创建它时指定的位置)。
我尝试使用 android:lineSpacingExtra
属性,有一些成功,图像仍然比应该的位置低,但不那么多。有没有其他方法可以增加行间距而不会弄乱 ImageSpan
的垂直对齐?
ImageSpan.ALIGN_BOTTOM
或 ImageSpan.ALIGN_BASELINE
。我相信ImageSpan默认使用ALIGN_BOTTOM
,因此请尝试使用允许您指定ALIGN_BASELINE
的构造函数。我遇到了同样的问题,行间距改变了基线,所以当你输入文本时会把图片拉下来...你需要实现自定义的image span,通过更改其绘制方法:
public class CustomImageSpan extends ImageSpan{
public static final int ALIGN_TOP = 2;
public static final int ALIGN_CUSTOM = 3;
@Override
public void draw(Canvas canvas, CharSequence text,
int start, int end, float x,
int top, int y, int bottom, Paint paint) {
Drawable b = getCachedDrawable();
canvas.save();
int transY = bottom - b.getBounds().bottom;
if (mVerticalAlignment == ALIGN_BASELINE) {
transY -= paint.getFontMetricsInt().descent;
} else if (mVerticalAlignment == ALIGN_TOP) {
transY += paint.getFontMetricsInt().ascent;
}
canvas.translate(x, transY);
b.draw(canvas);
canvas.restore();
}
private Drawable getCachedDrawable() {
WeakReference<Drawable> wr = mDrawableRef;
Drawable d = null;
if (wr != null)
d = wr.get();
if (d == null) {
d = getDrawable();
mDrawableRef = new WeakReference<Drawable>(d);
}
return d;
}
private WeakReference<Drawable> mDrawableRef;
}