Однако они применяют диапазон ко всему TextView, а не к выделенному фрагменту. Я попытался использовать Layout.getSelectionPath() и, похоже, неправильно понял, как работает этот метод, поскольку не вижу диапазона, который нужно применить.
Вот как я пытался его реализовать:
Код: Выделить всё
class DashedUnderlineSpan(private val layout: Layout) : LineBackgroundSpan, LineHeightSpan {
override fun chooseHeight(
text: CharSequence, start: Int, end: Int, spanstartv: Int, v: Int,
fm: FontMetricsInt
) {
val spacingExtra = 2f
fm.ascent = (fm.ascent - spacingExtra).toInt()
fm.top = (fm.top - spacingExtra).toInt()
fm.descent = (fm.descent + spacingExtra).toInt()
fm.bottom = (fm.bottom + spacingExtra).toInt()
}
override fun drawBackground(
canvas: Canvas, p: Paint, left: Int, right: Int, top: Int, baseline: Int,
bottom: Int, text: CharSequence, start: Int, end: Int, lnum: Int
) {
val paint = Paint()
paint.color = Color.GRAY
paint.style = Paint.Style.STROKE
paint.setPathEffect(DashPathEffect(floatArrayOf(0f, 30f), 0f))
paint.strokeWidth = 2f
val path = Path()
layout.getSelectionPath(0, 5, path)
canvas.drawPath(path, paint)
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... for-a-word
Мобильная версия