Android TextView lineCount没有';设置ellipsize时,t返回正确的值

Android TextView lineCount没有';设置ellipsize时,t返回正确的值,android,xml,android-layout,textview,Android,Xml,Android Layout,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.

我想展开和折叠我的文本视图。所以我做了这些扩展函数来实现这一点

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, MAX_LINES_PROPERTY_NAME, numLines)
    animation.setDuration(EXPAND_ANIMATION_DURATION).start()
}
private var textLineCount = 0

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    
        textView.post {
                textLineCount = textView.lineCount
                textView.ellipsize = TextUtils.TruncateAt.END
        }
}
当我这样设置TextView时出现问题

<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">
fun TextView.expand(maxLines: Int? = null) {
    val animation = ObjectAnimator.ofInt(this, MAX_LINES_PROPERTY_NAME, maxLines ?: this.lineCount)
    animation.setDuration(EXPAND_ANIMATION_DURATION).start()
}


显然,当ellipsize设置为“end”时,textView.lineCount返回3。当我删除那行代码时,一切都正常。有人知道我如何避免这种情况吗?

我找到了一些简单的方法来设置省略号并获取整个TextView的行数

首先,我删除了xml中的android:ellipsize=“end”行

之后,我将lineCount保存在本地,并在执行此操作后以编程方式设置ellipsize

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, MAX_LINES_PROPERTY_NAME, numLines)
    animation.setDuration(EXPAND_ANIMATION_DURATION).start()
}
private var textLineCount = 0

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    
        textView.post {
                textLineCount = textView.lineCount
                textView.ellipsize = TextUtils.TruncateAt.END
        }
}
现在我在本地有了textLineCount,我只需将它传递到扩展TextView的函数中,我对它进行了如下修改

<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">
fun TextView.expand(maxLines: Int? = null) {
    val animation = ObjectAnimator.ofInt(this, MAX_LINES_PROPERTY_NAME, maxLines ?: this.lineCount)
    animation.setDuration(EXPAND_ANIMATION_DURATION).start()
}
就这样。我知道这不是最幸福的解决办法,但它是有效的。如果有人知道的更好,请分享你的解决方案