Android Can';t使用ScrollTo在Kotlin中滚动至文本视图的自动中间位置

Android Can';t使用ScrollTo在Kotlin中滚动至文本视图的自动中间位置,android,kotlin,Android,Kotlin,我在Java方面有丰富的经验,但对Kotlin和Android开发来说是全新的(我希望学习Kotlin最终会有回报)。在某些场景中,我希望我的可滚动文本视图自动滚动到文本视图的某个位置,在其他场景中滚动到底部 我发现我可以使用scrollTo()方法滚动到所需的Y值。由于文本的长度会发生变化,因此我无法找到一种方法来获得整个滚动文本视图的确切高度。但是,我可以将行数乘以行高,以找到合适的高度。因此,这将非常有效。但是,行计数不会立即更新,事实上,它似乎是在按下按钮更新textview的整个事件完

我在Java方面有丰富的经验,但对Kotlin和Android开发来说是全新的(我希望学习Kotlin最终会有回报)。在某些场景中,我希望我的可滚动文本视图自动滚动到文本视图的某个位置,在其他场景中滚动到底部

我发现我可以使用scrollTo()方法滚动到所需的Y值。由于文本的长度会发生变化,因此我无法找到一种方法来获得整个滚动文本视图的确切高度。但是,我可以将行数乘以行高,以找到合适的高度。因此,这将非常有效。但是,行计数不会立即更新,事实上,它似乎是在按下按钮更新textview的整个事件完成后更新的。如果我再次单击它,那么文本将滚动到适当的高度。看起来我需要调用该方法两次,但我觉得我遗漏了一些东西。第一次运行时,行计数为0,使滚动高度为0,因此textview滚动到屏幕的最顶部

因为我并没有使用ScrollView,也并没有使用Java,所以关于堆栈溢出的许多其他答案似乎很有用,但并不相关

谢谢


JT

对于添加内容后元素高度发生变化的此类问题,我会执行以下操作,因为您使用的是kotlin,所以会更简单。

视图
创建一个扩展函数,以便在测量完成(即内容已完全加载)后调用函数
。比如:


为我工作;)

对于添加内容后元素高度发生变化的此类问题,我会执行以下操作,因为您使用的是kotlin,所以会更简单。

视图
创建一个扩展函数,以便在测量完成(即内容已完全加载)后调用函数
。比如:

为我工作;)

object ViewExtension {

    // Extension function
    inline fun <T : View> T.afterMeasureComplete(crossinline f: T.() -> Unit) {
        viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
            override fun onGlobalLayout() {
                if (viewTreeObserver.isAlive) {
                    if (measuredWidth > 0 && measuredHeight > 0) {
                        viewTreeObserver.removeOnGlobalLayoutListener(this)
                        f()
                    }
                }
            }
        })
    }
}
// import the extension function
import you.package.and.directory.util.ViewExtension.afterMeasureComplete

// Then after you have initialized your TextView, do this:
yourTextView.afterMeasureComplete {
    // Now get the height of the text view, and scroll to your desired position
}