问题描述
我想扩展和折叠我的TextView。所以我做了这些扩展功能。
Windows
当我这样设置TextView时出现问题
private const val MAX_LInes_PROPERTY_NAME = "maxLines"
private const val EXPAND_ANIMATION_DURATION = 200L
fun TextView.expand() {
val animation = ObjectAnimator.ofInt(this,MAX_LInes_PROPERTY_NAME,this.lineCount)
animation.setDuration(EXPAND_ANIMATION_DURATION).start()
}
fun TextView.collapse(numLines: Int) {
val animation = ObjectAnimator.ofInt(this,numLines)
animation.setDuration(EXPAND_ANIMATION_DURATION).start()
}
当ellipsize设置为“ end”时,显然textView.lineCount返回3。当我删除那行代码时,一切正常。有谁知道我怎么避免这种情况?
解决方法
我发现了一种设置椭圆大小并获取整个TextView的lineCount的方法。
首先,我删除了xml中的<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="3"
android:ellipsize="end"
android:text="Long text"
android:textColor="@color/black"
android:textSize="16sp">
行。
此后,我将lineCount保存在本地,然后以编程方式设置ellipsize。
android:ellipsize="end"
现在我在本地拥有textLineCount,我只是将其传递到用于扩展我这样修改的TextView的函数中
private var textLineCount = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
textView.post {
textLineCount = textView.lineCount
textView.ellipsize = TextUtils.TruncateAt.END
}
}
就是这样。我知道这不是最幸福的解决方案,但是可以。如果有人知道的更好,请分享您的解决方案。