我有TextView
使用android:lineSpacingMultiplier
属性来增加行之间的间距,除了向文本添加ImageSpan
之外,其工作正常。
这会导致图像与行之间的空格底部对齐,而不是文本的基线(如我创建时所指定的那样)。
我尝试使用android:lineSpacingExtra
属性,取得了一些成功,图像的位置仍然低于应有的值,但不是那么多。是否有另一种方法可以增加线之间的间距而不会弄乱ImageSpan
的垂直对齐?
答案 0 :(得分:4)
构建ImageSpan时,可以指定垂直对齐,ImageSpan.ALIGN_BOTTOM
或ImageSpan.ALIGN_BASELINE
之一。我相信ImageSpan默认使用ALIGN_BOTTOM
,因此请尝试使用允许您指定ALIGN_BASELINE
的构造函数。
答案 1 :(得分:1)
我遇到了同样的问题,行间距改变了基线,因此在输入文字时会删除图像... 您必须通过更改其绘制方法来实现自定义图像范围:
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;
}