Android 的 leanback 库提供了一些自定义 RowFragment 的标准方法,包括 Rows 和 Cards 本身,但我不确定如何在框架提供的内容之外添加自定义元素。
我特别想要实现的是将一个 FooterItem 添加到一行,类似于每一行都有一个 HeaderItem。
我想获得 ListRowView/ListRowPresenter 中的现有功能,但我不确定如何“正确”地执行此操作。
最佳答案
与 Leanback
的几乎所有内容一样,给猫剥皮的方法不止一种。
我们需要自定义 ListRow
以向标题添加更多填充。我们通过重写 ListRowPresenter
的 onBindRowViewHolder
实现了这种级别的自定义,获取标题的 View
(通过 View header = holder .getHeaderViewHolder().view;
).然后我们使用 header.getLayoutParams().height = rowItem.getRowHeaderHeight();
更改它的高度。
使用相同的技术,您可以将页脚 View 动态添加到 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
看到它为 R.layout.lb_list_row
膨胀了 xml .然后它只使用 R.id.row_content
的 View 。
这将是 holder.view
提供的实际 View ,然后您可以在其上设置文本并执行任何您想要的操作。
如果您需要任何进一步的说明,请告诉我。
关于android - 如何自定义 Leanback 的 ListRows?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42283133/