Как изменить пространство строк с помощью SpannableString? - PullRequest
2 голосов
/ 13 февраля 2020

Для проекта мне нужно отредактировать текст в EditText с некоторыми атрибутами, такими как жирный шрифт, itali c, size ... et c. Итак, я сделал CustomSpan, который реализует StyleSpan со всеми необходимыми мне атрибутами. Ниже моего кода:

class CustomSpan(
    val bold: Boolean = false,
    val italic: Boolean = false,
    val size: Int = 14,
    val color: Int = Color.BLACK,
    val letterSpacing: Float = 0f
): StyleSpan(when {
        bold && italic -> Typeface.BOLD_ITALIC
        bold -> Typeface.BOLD
        italic -> Typeface.ITALIC
        else -> Typeface.NORMAL
    }) {

    override fun updateDrawState(ds: TextPaint) {
        super.updateDrawState(ds)

        ds.color = color
        ds.textSize = size.toFloat()
        ds.letterSpacing = letterSpacing
    }

    override fun updateMeasureState(paint: TextPaint) {
        super.updateMeasureState(paint)

        paint.color = color
        paint.textSize = size.toFloat()
        paint.letterSpacing = letterSpacing
    }

    fun copy() : CustomSpan = CustomSpan(bold, italic, size, color, font, letterSpacing)

    fun copyWith(bold: Boolean? = null,
                 italic: Boolean? = null,
                 size: Int? = null,
                 color: Int? = null,
                 letterSpacing: Float? = null) : CustomSpan {

        return CustomSpan(
            bold = bold ?: this.bold,
            italic = italic ?: this.italic,
            size = size ?: this.size,
            color = color ?: this.color,
            letterSpacing = letterSpacing ?: this.letterSpacing
        )
    }
}

Но мне также нужно изменить расстояние между строками в моем EditText. Для этого я подумал изменить нижнюю часть или отступы, но я не знаю, как это сделать. У вас есть идеи?

Спасибо за помощь, хорошего дня!

1 Ответ

2 голосов
/ 14 февраля 2020

Вероятно, вы могли бы достичь этого с помощью baselineShift, вы можете попробовать что-то вроде этого:

override fun updateDrawState(ds: TextPaint) {
    super.updateDrawState(ds)

    ds.color = color
    ds.textSize = size.toFloat()
    ds.letterSpacing = letterSpacing

    // here you might want to play with a specific value or ds.ascent/ds.descent..
    ds.baselineShift += 12
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...