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