Ответ 1
Лучшее решение, которое я придумала до сих пор, - это программно установить maxLines
значение maxLines
во время выполнения. Примерно так получится сделать работу:
fun TextView.setMaxLinesForEllipsizing() = doOnPreDraw {
val numberOfCompletelyVisibleLines = (measuredHeight - paddingTop - paddingBottom) / lineHeight
maxLines = numberOfCompletelyVisibleLines
}
Имейте в виду, что это зависит от Android KTX (но также может быть легко достигнуто с помощью обычного OnPreDrawListener
).
Затем мы можем просто вызвать это расширение из любого TextView
мы хотим получить динамический многоточие.
textView.setMaxLinesForEllipsizing()
Если текст изменится, может потребоваться его повторный вызов. Таким образом, также возможно достичь более полного (и сложного) решения, переместив эту логику в пользовательский TextView
и, возможно, переопределив там onTextChanged()
.