Android 自动调整 TextView 的动态省略号支持

Dynamic ellipsis support for Android autosizing TextViews

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

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

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

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

fun TextView.setMaxLinesForEllipsizing() = doOnPreDraw {
  val numberOfCompletelyVisibleLines = (measuredHeight - paddingTop - paddingBottom) / lineHeight
  maxLines = numberOfCompletelyVisibleLines
}

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

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

textView.setMaxLinesForEllipsizing()

不过,如果文本发生变化,则可能需要再次调用它。因此,通过将此逻辑移至自定义 TextView 并可能在那里覆盖 onTextChanged(),也可能获得更完整(和更复杂)的解决方案。