我开始为我们的应用程序提供 Leanback 支持。根据 UI 要求,我需要添加与每个标题对应的多个列表行,这与 Youtube App 在 Android TV 上所做的完全一样。默认ListRowPresenter似乎只呈现一个列表行及其标题。有没有支持多个列表行的演示者?我正在考虑创建一个在每个项目中嵌入 RowsFragment 的自定义演示者,如果我的方法错误,请纠正我。
2 回答
Leanback 团队最近在库的版本中添加了对多个ListRow
s 的支持。它允许您提供一个映射到. 你可以在他们的Leanback 展示中看到一个例子。具体来说,这是他们提供示例的文件。HeaderItem
24.0.0
RowsFragment
HeaderItem
PageRowFragmentFactory
您将需要一个新的,BrowseFragment
它指定哪些 Fragments 映射到哪个HeaderItem
s。像这样:
@Override
public Fragment createFragment(Object rowObj) {
Row row = (Row)rowObj;
mBackgroundManager.setDrawable(null);
if (row.getHeaderItem().getId() == HEADER_ID_1) {
return new SampleFragmentA();
} else if (row.getHeaderItem().getId() == HEADER_ID_4) {
return new WebViewFragment();
}
throw new IllegalArgumentException(String.format("Invalid row %s", rowObj));
}
你可以让上面的方法返回一个 a 的实例,RowsFragment
现在你将拥有RowsFragment
包含多个ListRow
s 映射到一个的实例HeaderItem
。
截至目前,您可以通过 Leanback 的 24.0.0 版在您的 gradle 文件中使用以下行来获得这种好处:
compile 'com.android.support:leanback-v17:24.0.0
您可能会收到警告,但现在可以放心地忽略它。
Leanback版本中还有很多其他非常酷的东西,24.0.0
比如时髦的过渡动画和更简洁的 API。它都可以在我上面链接的那个示例项目中找到。还有一个来自 Google I/O 的演讲,其中涵盖了更多的新增内容。
有没有支持多个列表行的演示者?
从来没听说过。问题是 BrowseFragment 只接受子类的子类Row
。因此,BrowseFragment 中的每个条目只能有单行(及其各自的标题)。
我正在考虑创建一个在每个项目中嵌入 RowsFragment 的自定义演示者,如果我的方法错误,请纠正我。
正如我刚才提到的,我怀疑创建自定义演示者会有所帮助。
到目前为止,我能够提出的唯一解决方案是简单地创建一个自定义版本的 BrowseFragment(通过手动扩展RowsFragment
和HeadersFragment
类),以便它支持任何类型的片段。
如果你有兴趣,我写了一系列关于流程的文章 https://medium.com/building-for-android-tv/
以及提供自定义版本的 BrowseFragment https://github.com/dextorer/BuildingForAndroidTV的基础项目
我也在考虑编写一个库来简化这个自定义组件的使用。