如何自定义 Leanback 的 ListRows?

Fra*_*ega 3 android gridview android-tv leanback

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

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

我想获得 ListRowView/ListRowPresenter 中的现有功能,但我不确定如何“正确”执行此操作。

Kyl*_*enn 6

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

我们需要自定义ListRow以向标题添加更多填充。我们已经通过重写达到了这个级别的自定义onBindRowViewHolderListRowPresenter,抓住了View页眉(通过View header = holder.getHeaderViewHolder().view;)。然后我们用 改变了它的高度header.getLayoutParams().height = rowItem.getRowHeaderHeight();

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

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

当 RowPresenter 的子类添加 UI 小部件时,它应该子类化 RowPresenter.ViewHolder 并覆盖 createRowViewHolder(ViewGroup) 和 initializeRowViewHolder(ViewHolder)。子类必须为小部件使用布局 ID“row_content”,该小部件将与父片段中可能存在的任何 HeadersFragment 的标题对齐。

因此,使用这种新推荐的方法,您基本上将提供您自己的 xml。我相信你甚至可以子类ListRowPresenter。要查看代码如何工作,ListRowView请查看它是否为 .xml 膨胀了 xml R.layout.lb_list_row。然后它只使用R.id.row_content.

然后这将是由提供的实际视图,holder.view然后您可以在其上设置文本并执行任何您想要的操作。

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

  • 我最终扩展了 ListRowPresenter,并覆盖了 onBindViewHolder,尽管我必须添加一个检查以查看是否已经添加了我的额外视图(因为由于某种原因 onCreateView 被标记为最终视图)。我真的希望我可以在 onCreate 上做,所以它肯定只做一次而不是每次都检查,但我想这很好。至于自定义 Header,您是否知道是否有办法通过扩展 Leanback 主题、覆盖某些值并将该主题设置为您的活动来实现此目的? (3认同)
  • 这确实有效,我完全按照你们俩的建议做了,而且有效。 (2认同)