制作 Android 电视菜单的最佳方法是什么?
What is the best way to make an Android TV menu?
我目前正在开发 Android 电视应用。我发现它具有挑战性,因为您不能只绘制一个列表并让用户通过触摸进行导航。当用户点击 Dpad 按钮时,您必须以编程方式滚动列表。
我想创建一个类似于 Android 电视“设置”屏幕中的菜单的列表。请观看视频 example。
到目前为止,我使用的解决方案是创建水平 RecyclerView
,当用户向右或向左点击方向键时更新。
所以在我的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 语句)
结果与上面发布的视频类似。但是,它并不像我希望的那样 "snappy"。我只是想确保这是实现它的最佳方式。
这是来自网络调用的动态列表。所以我不能只用静态视图制作布局。
v17.leanback.app 库是实现此目的的方法 - 这就是您的视频中使用的方法。如果您使用 auto-generated Android Studio TV Activity 创建一个新的 TV-only Android Studio 项目,它将为您提供一个很好的起点 header 行、自定义等
以防万一:
- Android Studio > File > New Project > name it & click Next
- Only select the TV Platform then click Next
- Select "Android TV Activity" then click Next
您会关心 MainFragment
和 CardPresenter
。将 BrowseFragment
视为您用行填充的列表视图。行中填满 built-upon FrameLayouts
的卡片。 RecyclerView
已经集成到 leanback 中...我发现我必须花费大量时间来自定义它们,正如您所指出的那样,并且只是尝试 find/navigate 相关的在线文档。祝你好运。
我目前正在开发 Android 电视应用。我发现它具有挑战性,因为您不能只绘制一个列表并让用户通过触摸进行导航。当用户点击 Dpad 按钮时,您必须以编程方式滚动列表。
我想创建一个类似于 Android 电视“设置”屏幕中的菜单的列表。请观看视频 example。
到目前为止,我使用的解决方案是创建水平 RecyclerView
,当用户向右或向左点击方向键时更新。
所以在我的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 语句)
结果与上面发布的视频类似。但是,它并不像我希望的那样 "snappy"。我只是想确保这是实现它的最佳方式。
这是来自网络调用的动态列表。所以我不能只用静态视图制作布局。
v17.leanback.app 库是实现此目的的方法 - 这就是您的视频中使用的方法。如果您使用 auto-generated Android Studio TV Activity 创建一个新的 TV-only Android Studio 项目,它将为您提供一个很好的起点 header 行、自定义等
以防万一:
- Android Studio > File > New Project > name it & click Next
- Only select the TV Platform then click Next
- Select "Android TV Activity" then click Next
您会关心 MainFragment
和 CardPresenter
。将 BrowseFragment
视为您用行填充的列表视图。行中填满 built-upon FrameLayouts
的卡片。 RecyclerView
已经集成到 leanback 中...我发现我必须花费大量时间来自定义它们,正如您所指出的那样,并且只是尝试 find/navigate 相关的在线文档。祝你好运。