更改焦点时强制RecyclerView ScrollAndroid TV

问题描述

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

例如:

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

我希望它随着焦点项目的改变而滚动。

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

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

解决方法

尝试使用 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。