Android TV RecyclerView重点互动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android TV RecyclerView重点互动相关的知识,希望对你有一定的参考价值。

我目前正在使用常规的RecyclerViewGridLayoutManager与不同的spanCount取决于viewTypeandroid TV应用程序。一切都很好,但我有两个问题:

  1. 如果您长按dpad以在项目之间快速滚动,有时焦点将丢失到不属于RecyclerView的子视图。
  2. 我如何告诉RecyclerView将当前的焦点视图保持在网格的中心?

似乎列出的问题是通过使用来自VerticalGridView库的LeanBack来修复的,但它使用的LayoutManger是内部的并且不支持spanCount

答案

Recycler视图适用于Android TV.Possible解决方案包括:

1.add focusable和focusableInTouchode to view。通过代码添加focusListner,并在每次单击视图时请求焦点。

2.要将Recycler View焦点项目保留在中心,您必须覆盖布局管理器,就像这个例子一样。

RecyclerView smoothScroll to position in the center. android

要么

使用layoutManager.scrollToPositionWithOffset(position,offset),其中以位置为中心的视图位置和偏移量是回收器视图宽度/ 2。

另一答案
  1. 对于常规的RecyclerView, 我必须指定:android:descendantFocusability="beforeDescendants" 此外,android:nextFocusDown="@+id/recyclerviewId"将把重点放在RV本身。
  2. 我看到的唯一解决方案是选择项目来定位currentPosition + spancount的关键监听器。
另一答案

当用d-pad导航时,你可以试着用qazxsw poi焦点滚动来检查这个qazxsw poi的qazxsw poi。

这是workaround

这里的问题是bug使用RecycleViewSO question实现,当焦点接近GridLayoutManager的内边界时调用LinearLayoutManageronFocusSearchFailed()实现只提供第一个/最后一个(取决于滚动方向)元素。因此焦点跳转到新行的第一个/最后一个元素。

因此,也许这种解决方法可以解决您的问题或让您了解如何解决您的问题。

以上是关于Android TV RecyclerView重点互动的主要内容,如果未能解决你的问题,请参考以下文章

Android TV 中的 RecyclerView 项目焦点

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

Android为TV端助力 listview与recyclerview上下联动

Android TV端的(RecyclerView)水平滚动焦点错乱问题

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

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