焦点更改时强制 RecyclerView 滚动(Android TV)

Posted

技术标签:

【中文标题】焦点更改时强制 RecyclerView 滚动(Android TV)【英文标题】:Force RecyclerView Scroll when focus change (Android TV) 【发布时间】:2021-01-02 22:17:54 【问题描述】:

在使用 RecyclerView 时,如果所有项目都在屏幕上可见,则移动焦点不会导致 LayoutManager 滚动。

例如:

| (1) 2 3 4 5 | -> DPAD 右 -> | 1 (2) 3 4 5 |

我想让它随着焦点项目的变化而滚动。

| (1) 2 3 4 5 | -> DPAD 右 -> | (2) 3 4 5 |

我正在考虑使用 smoothScrollToPosition,但它不起作用,因为布局管理器不考虑在那种情况下滚动。还有其他方法可以实现吗?谢谢

【问题讨论】:

【参考方案1】:

尝试使用 androidx.leanback:leanback:1.0.0 库中的 VerticalGridView 或 Horizo​​ntalGridView。

    gridView.setItemAlignmentOffset(0)
    gridView.setItemAlignmentOffsetPercent(
        VerticalGridView.ITEM_ALIGN_OFFSET_PERCENT_DISABLED
    )

    // align to a fixed position from top
    gridView.setWindowAlignmentOffset(10)
    gridView.setWindowAlignmentOffsetPercent(
        VerticalGridView.WINDOW_ALIGN_OFFSET_PERCENT_DISABLED
    )
    gridView.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_NO_EDGE)

此代码示例来自leanback 库的BaseRowFragment。如您所见,VerticalGridView 基于 RecyclerView 并使用了一个leanback GridLayoutManager。

【讨论】:

以上是关于焦点更改时强制 RecyclerView 滚动(Android TV)的主要内容,如果未能解决你的问题,请参考以下文章

当nestedscrollview 中的recyclerview 滚动时,对讲焦点转到工具栏项

android tv常见问题(四)焦点变化时,Recyclerview是如何进行滚动的

潜在的 Glide 错误 - 在 Android TV 上使用 Dpad 快速滚动时,RecyclerView 项目失去焦点

在 recyclerview 中提交列表后强制编辑文本以移除焦点

RecyclerView 项目失去焦点

Android Tv RecyclerView 设置其项目的下一个焦点