LineHeightFactor и LineSpace с Spannable - PullRequest
2 голосов
/ 18 июня 2020

Мне нужно использовать EditText с Span для настройки текста. Для моего приложения мне нужны два параметра для моих промежутков:

  • Строка
  • Коэффициент высоты строки

Я пытался использовать интерфейс LineHeightSpan для первого параметра вроде этого:

class LineSpaceSpan(private val space : Int) : LineHeightSpan {

        override fun chooseHeight(
                text: CharSequence?,
                start: Int,
                end: Int,
                spanstartv: Int,
                lineHeight: Int,
                fm: Paint.FontMetricsInt?) {

                fm?.apply {
                    descent += space
                    bottom += space
                }
        }   
}

Но результат не совсем то, что я ожидал ...

Для Line Height factor Я знаю, что в атрибуте XML есть EditText, но мне нужно другое значение для каждой строки

У кого-нибудь были такие потребности? Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ: Дополнительная информация

Я пытался решить свою проблему с помощью LineHeightSpan, как указано выше, с помощью этого кода:

class LineSpaceSpan(private var lineRatio: Float, private var space : Int) : LineHeightSpan {

        override fun chooseHeight(
                text: CharSequence?,
                start: Int,
                end: Int,
                spanstartv: Int,
                lineHeight: Int,
                fm: Paint.FontMetricsInt?) {

                fm?.apply {

                    val currentHeight = it.descent - it.ascent
                    val targetHeight = lineRatio * currentHeight

                    val heightMargin = (targetHeight - currentHeight) / 2

                    // Set line height
                    it.descent += heightMargin.roundToInt()
                    it.ascent -= heightMargin.roundToInt()

                    // Set line space
                    it.descent += space
                    it.bottom += space
                }
        }   
}

но у меня возникнут проблемы, если я изменю значения для lineRatio или space:

  • LineHeight не изменится
  • LineSpace, вместо изменения пробела со следующим диапазоном, он перемещается вверх или вниз по тексту внутри текущего диапазона

РЕДАКТИРОВАТЬ: РЕШЕНИЕ

Я нашел проблему. .. Во-первых, код выше работает! Проблема возникла из-за моего выбора, я не выделил строку полностью ("\ n" в конце)

...