我正在制作简单的计算器,其设计与Google的计算器相似。我在HorizontalScrollView中包含带有计算的文本,并且我希望在键入时将其滚动到计算的末尾。我已经用这段代码(科特琳)做到了:
textView.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable) {
scrollVIew.fullScroll(HorizontalScrollView.FOCUS_RIGHT)
}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
})
这是带有scrollView的.xml片段:
<HorizontalScrollView
android:id="@+id/scrollVIew"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="0"
android:textAlignment="textEnd"
android:textSize="75sp" />
</HorizontalScrollView>
这有点奏效,当文本更新时,文本滚动到上一个聊天记录之前,而不是最后一个。有人知道为什么吗?
答案 0 :(得分:1)
只需使用performBatchUpdates()
来执行fullScroll:
post
这是因为在textView.post { scrollVIew.fullScroll(HorizontalScrollView.FOCUS_RIGHT) }
回调中,textView的文本尚未完成更改,因此您应该使用afterTextChanged
在下一个运行循环中进行滚动。