Например, у меня есть строка «Один два три четыре пять» для установки в TextView.
Если текст занимает только одну строку, изменений нет, и все в порядке
Если текст занимает две строки, то:
- ожидаемый результат: «Один два \ n три четыре пять» ( ровно после «двух»)
- фактическийрезультат: «Один два три четыре \ n пять» (разрыв строки может быть где угодно)
Также у меня есть пустое TextView в ConstraintLayout с нулевой шириной, поэтому я не знаю ширинуtextView, прежде чем установить текст.
Как мне этого добиться?
Насколько я знаю, ширина текста может быть измерена до установки текста и разделена на ширину textView, но, к сожалению, она не работает для меня, так как я не знаю ширину textview.
Вот мой код:
override fun setText(textView: TextView, prefix: String, postfix: String) {
var fullText = "$prefix $postfix"
val lines = getLinesCount(textView, fullText)
if (lines > 1) {
fullText = fullText.replace(postfix, "\n$postfix")
}
textView.text = fullText
}
private fun getLinesCount(textView: TextView, text: String): Int {
val paint = Paint()
paint.textSize = textView.textSize
val rect = Rect()
paint.getTextBounds(text, 0, text.length, rect)
// I'm not sure how to calculate textView actual width
return (ceil(rect.width().toFloat() / textView.width)).toInt()
}