我目前正在开发Android TV应用。我发现它具有挑战性,因为您不能只绘制一个列表并让用户通过触摸进行导航。当用户点击Dpad按钮时,您必须以编程方式滚动列表。
我想创建一个类似于Android TV上“设置”屏幕中菜单的列表。请参阅下面的视频以获取示例:
https://www.dropbox.com/s/yvhrrh7wy8jj2s4/device-2016-12-08-111314.mp4?dl=0
到目前为止,我使用的解决方案是创建水平RecyclerView
,当用户向右或向左击中dpad时会更新。
所以在我的adapter
我有一个方法:
public void incrementPosition() {
if(currentSelection < getItemCount()) {
previousSelection = currentSelection;
notifyItemChanged(previousSelection);
currentSelection++;
notifyItemChanged(currentSelection);
}
}
然后当onBindViewHolder
被调用时,我有类似的东西:
if(position == currentSelection) {
//draw item to look like it's selected
}
else if(position == previousSelection) {
// draw item to look it's NOT selected
}
这将使项目看起来被选中,但列表不会与新选择一起滚动。
recentlyAddedRecyclerView.smoothScrollToPosition(currentSelection + 2)
(是的,我知道currentSelection
+ 2可以超出列表,我有一些if语句)
结果与上面发布的视频类似。然而,它不像&#34; snappy&#34;正如我所希望的那样。我只是想确保这是实现它的最佳方式。
这是来自网络电话的动态列表。所以我不能只使用静态视图进行布局。
答案 0 :(得分:2)
v17.leanback.app库是实现这一目标的方式 - 这是您视频中使用的内容。如果您使用自动生成的Android Studio TV Activity创建一个全新的仅限电视的Android Studio项目,它将为您提供一个很好的起点,包括标题行,自定义等的实际示例。
以防万一: 1. Android Studio&gt;文件&gt;新项目&gt;将它命名为&amp;点击下一步 2.仅选择电视平台,然后单击下一步 3.选择&#34; Android TV Activity&#34;然后单击“下一步”
你会关心MainFragment&amp; CardPresenter。可以将BrowseFragment看作是用行填充的列表视图。行充满了内置FrameLayouts的卡片。 RecyclerView已经集成到了leanback ......我发现我必须花很多时间来定制它们,就像你已经注意到的那样,只是想找到/浏览相关的在线文档。祝你好运。