スパンに何らかのマージン/パディングが必要なため、ImageSpan を拡張するカスタム クラスを作成しようとしています。
私がする必要があると考えたのは、 getSize 関数をオーバーライドしてより大きな幅を返すことで、スパンがグラフィカルに配置されるようにすることです。
問題は、getSize 関数をオーバーライドするとすぐに、ビューが完全に台無しになることです。私の経験に基づいた推測では、その関数内で何かばかげたことをしているのですが、何がわかりません。
カスタム クラス コード:
class PaddingImageSpan(drawable: Drawable, private val offset: Float = 0f) : ImageSpan(drawable) {
override fun getSize(
paint: Paint,
text: CharSequence?,
start: Int,
end: Int,
fm: Paint.FontMetricsInt?
): Int {
val width = paint.measureText(text, start, end)
val fontMetricsInt = paint.fontMetricsInt
if (fm != null){
fm.ascent = fontMetricsInt.ascent
fm.bottom = fontMetricsInt.bottom
fm.descent = fontMetricsInt.descent
fm.leading = fontMetricsInt.leading
fm.top = fontMetricsInt.top
}
println(width)
return width.roundToInt()
}
}