动态省略号支持Android自动调整TextViews

Fre*_*ula 9 android ellipsis autosize textview android-support-library

新的Autosizing TextViews非常棒,但似乎缺少一个基本的东西:省略号.

添加省略号仍然需要定义maxLines属性,但如果我希望能够根据文本视图边界动态调整文本大小,我还希望能够在需要时动态添加省略号.现在,如果文本甚至不适合最小文本大小,它只会被裁剪.

如何在不放弃新的自动调整支持的情况下添加对动态省略号的支持?

Fre*_*ula 10

到目前为止,我提出的最佳解决方案是以编程方式maxLines在运行时设置为正确的值.这样的事情将完成工作:

fun TextView.setMaxLinesForEllipsizing() = doOnPreDraw {
  val numberOfCompletelyVisibleLines = (measuredHeight - paddingTop - paddingBottom) / lineHeight
  maxLines = numberOfCompletelyVisibleLines
}
Run Code Online (Sandbox Code Playgroud)

请注意,这取决于Android KTX(但也可以通过常规方式轻松实现OnPreDrawListener).

然后我们可以简单地从任何TextView我们想要获得动态省略号的地方调用此扩展.

textView.setMaxLinesForEllipsizing()
Run Code Online (Sandbox Code Playgroud)

如果文本发生了变化,可能需要再次调用它.因此,通过将此逻辑移动到自定义TextView并可能onTextChanged()在那里重写,也可能达到更完整(和复杂)的解决方案.