设置ellipsize时,Android TextView lineCount无法返回正确的值

问题描述

我想扩展和折叠我的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
        }
}

就是这样。我知道这不是最幸福的解决方案,但是可以。如果有人知道的更好,请分享您的解决方案。