Android - Spannable: невозможно установить несколько диапазонов одновременно
У меня есть следующий код для установки диапазона цветов для нескольких подстрок одной и той же строки.
fun getColoredText(text: String, @ColorInt color: Int, vararg coloredSubText: String): Spannable {
val spannable = SpannableString(text)
for (textToColor in coloredSubText) {
val start = text.indexOf(textToColor)
spannable.setSpan(
ForegroundColorSpan(color),
start,
start + textToColor.length - 1,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
spannable.
}
return spannable
}
Приведу следующие аргументы:
getColoredText("This is my full length of the string", someColorValue, "my", "length")
Но все после "my full length of the string"
окрашивается. Может ли кто-нибудь помочь выяснить, что не так с указанным выше методом?
Благодарность
1 ответ
Приведенный выше код в порядке. Проблема заключалась в том, что я пытался установить интерактивный диапазон для spannable с цветом. И интерактивный диапазон перекрывает другие цвета. Способ его установить следующим образом:
fun getClickableTextWithColor(spannable: Spannable, clickableText: String, @ColorInt color: Int, onClickListener: (View) -> Unit): Spannable {
val text = spannable.toString()
val start = text.indexOf(clickableText)
spannable.setSpan(
object : ClickableSpan() {
override fun onClick(widget: View) {
onClickListener.invoke(widget)
}
override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.color = color
}
},
start,
start + clickableText.length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
return spannable
}