SpannableString图片无法上下居中的问题
2023-04-03 本文已影响0人
寻水的鱼Chock
图文混排时SpannableString设置ImageSpan遇见上下不居中的问题,做一个简单的记录。
解决方案
新增CenterAlignImageSpan.kt
class CenterAlignImageSpan(d: Drawable) : ImageSpan(d) {
override fun draw(canvas: Canvas, text: CharSequence?, start: Int, end: Int, x: Float, top: Int, y: Int, bottom: Int, paint: Paint) {
val fm: Paint.FontMetricsInt = paint.fontMetricsInt
val transY = (y + fm.descent + y + fm.ascent) / 2 - drawable.bounds.bottom / 2
canvas.save()
canvas.translate(x, transY.toFloat())
drawable.draw(canvas)
canvas.restore()
}
}
使用
val drawable = context.resources.getDrawable(R.drawable.ic_msg_red_pack)
drawable.setBounds(0, 0, 13.dpToPx(), 13.dpToPx())
val imageSpan = CenterAlignImageSpan(drawable)
spannedString.setSpan(
imageSpan,
7,
8,
Spannable.SPAN_INCLUSIVE_EXCLUSIVE
)