Как вставить разрыв строки перед конкретным словом в TextView в Android, если количество строк больше одного? - PullRequest
0 голосов
/ 05 февраля 2019

Например, у меня есть строка «Один два три четыре пять» для установки в 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() 
}

1 Ответ

0 голосов
/ 05 февраля 2019

TextView поддерживает getLineCount();, который возвращает количество строк после отображения текстового представления в пользовательском интерфейсе.

int lineCount = textView.getLineCount();
if(lineCount > 2) {
    //your line break logic goes here.
} else {
    //normal logic
}

См. Это doc .

Вам необходимо использовать Html.fromHtml() для форматирования XML textview в формате HTML.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    textView.setText(Html.fromHtml("One two <br> three four five", Html.FROM_HTML_MODE_COMPACT));
} else { 
    textView.setText(Html.fromHtml("One two <br> three four five"));
}

Вы также можете обратиться к этой ссылке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...