0

スパンに何らかのマージン/パディングが必要なため、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()
    }
}
4

1 に答える 1