如何自定义 Leanback 的 ListRows?

How to customize Leanback's ListRows?

Android 的 leanback 库提供了一些自定义 RowFragment 的标准方法,包括 Rows 和 Cards 本身,但我不确定如何在提供的内容之外添加自定义元素框架。

我特别想要实现的是将 FooterItem 添加到一行,类似于每一行都有一个 HeaderItem。

我想获得 ListRowView / ListRowPresenter 中的现有功能,但我不确定该怎么做 "properly"。

与几乎所有 Leanback 一样,给猫剥皮的方法不止一种。

我们需要自定义 ListRow 以向 header 添加更多填充。我们通过覆盖 ListRowPresenteronBindRowViewHolder,为 header 获取 View(通过 View header = holder.getHeaderViewHolder().view;)实现了这种级别的定制。然后我们用 header.getLayoutParams().height = rowItem.getRowHeaderHeight();.

改变了它的高度

使用相同的技术,您可以将页脚视图动态添加到 holder.view(使用 addView)。

另一种方法是遵循 RowPresenter 文档的建议。相关报价是:

When a subclass of RowPresenter adds UI widgets, it should subclass RowPresenter.ViewHolder and override createRowViewHolder(ViewGroup) and initializeRowViewHolder(ViewHolder). The subclass must use layout id "row_content" for the widget that will be aligned to the title of any HeadersFragment that may exist in the parent fragment.

因此,使用这种新的推荐方法,您基本上可以提供自己的 xml。我相信你甚至可以继承 ListRowPresenter。要查看代码的工作原理,请查看 ListRowView to see that it inflates the xml for R.layout.lb_list_row。然后它只使用 R.id.row_content.

的视图

那将是 holder.view 提供的实际视图,然后您可以在上面设置文本并做任何您想做的事。

如果您需要进一步说明,请告诉我。