HorizontalScrollView 以编程方式在没有焦点的情况下滚动
HorizontalScrollView programmatically scroll without focus
我开发了 Android TV 应用程序并有一个自定义视图,看起来像带有 TextView 子视图的 HorizontalScrollView。
当我按下某个按钮时,HorizontalScrollView 必须在 left\right 目的地滚动长子文本。
但是当我打电话给
scrollView.fullScroll(HorizontalScrollView.FOCUS_RIGHT)
horizontalScrollView 请求聚焦于自身,因此按钮松散聚焦,因为同一时间只能聚焦一个视图。
如何在不请求焦点的情况下以编程方式滚动 HorizontalScrollView,以使按钮不失去焦点?
我用 ObjectAnimator 找到了一些解决方案。
只是动画 scrollX 值。
fun scrollTo(scrollDestination: ScrollDestinations) {
val targetXScroll = when(scrollDestination) {
ScrollDestinations.START -> 0
ScrollDestinations.END -> mTextView.width
}
val animator = ObjectAnimator.ofInt(mScroll, "scrollX", targetXScroll)
animator.apply {
duration = 100
start()
}
}
在此快照中,mScroll 是带有子 mTextView 的 HorizontalScrollView。 ScrollDestinations 只是枚举。
但在我的例子中,当我在“正确”的目的地滚动时,它有一些过度滚动,可能是 TextView 宽度有问题。就我而言,我可以忽略这种过度滚动,但也许有人知道问题出在哪里。
我开发了 Android TV 应用程序并有一个自定义视图,看起来像带有 TextView 子视图的 HorizontalScrollView。 当我按下某个按钮时,HorizontalScrollView 必须在 left\right 目的地滚动长子文本。 但是当我打电话给
scrollView.fullScroll(HorizontalScrollView.FOCUS_RIGHT)
horizontalScrollView 请求聚焦于自身,因此按钮松散聚焦,因为同一时间只能聚焦一个视图。
如何在不请求焦点的情况下以编程方式滚动 HorizontalScrollView,以使按钮不失去焦点?
我用 ObjectAnimator 找到了一些解决方案。 只是动画 scrollX 值。
fun scrollTo(scrollDestination: ScrollDestinations) {
val targetXScroll = when(scrollDestination) {
ScrollDestinations.START -> 0
ScrollDestinations.END -> mTextView.width
}
val animator = ObjectAnimator.ofInt(mScroll, "scrollX", targetXScroll)
animator.apply {
duration = 100
start()
}
}
在此快照中,mScroll 是带有子 mTextView 的 HorizontalScrollView。 ScrollDestinations 只是枚举。
但在我的例子中,当我在“正确”的目的地滚动时,它有一些过度滚动,可能是 TextView 宽度有问题。就我而言,我可以忽略这种过度滚动,但也许有人知道问题出在哪里。