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()
,也可能获得更完整(和更复杂)的解决方案。
新的 Autosizing TextViews 非常棒,但似乎缺少一个基本的东西:省略号。
添加省略号仍然需要定义maxLines
属性,但如果我希望能够根据文本视图边界动态调整文本大小,我也希望能够动态添加省略号需要的时候。现在,如果文本不适合最小文本大小,它就会被裁剪。
如何在不放弃新的自动调整支持的情况下添加对动态省略号的支持?
到目前为止,我想出的最佳解决方案是在运行时以编程方式将 maxLines
设置为正确的值。这样就可以完成工作:
fun TextView.setMaxLinesForEllipsizing() = doOnPreDraw {
val numberOfCompletelyVisibleLines = (measuredHeight - paddingTop - paddingBottom) / lineHeight
maxLines = numberOfCompletelyVisibleLines
}
请注意,这取决于 Android KTX(但也可以通过常规 OnPreDrawListener
轻松实现)。
然后我们可以简单地从任何 TextView
我们想要获得动态省略号的地方调用这个扩展。
textView.setMaxLinesForEllipsizing()
不过,如果文本发生变化,则可能需要再次调用它。因此,通过将此逻辑移至自定义 TextView
并可能在那里覆盖 onTextChanged()
,也可能获得更完整(和更复杂)的解决方案。