如何自定义 Leanback 的 ListRows?
Posted
技术标签:
【中文标题】如何自定义 Leanback 的 ListRows?【英文标题】:How to customize Leanback's ListRows? 【发布时间】:2017-07-06 02:33:06 【问题描述】:android 的leaback 库提供了一些自定义 RowFragment 的标准方法,包括 Rows 和 Cards 本身,但我不确定如何在框架提供的之外添加自定义元素。
我特别想要实现的是在一行中添加一个 FooterItem,类似于每行都有一个 HeaderItem。
我想获得 ListRowView / ListRowPresenter 中的现有功能,但我不确定如何“正确”地做到这一点。
【问题讨论】:
【参考方案1】:与Leanback
的几乎所有事情一样,给猫剥皮的方法不止一种。
我们需要自定义 ListRow
以向标题添加更多填充。我们通过覆盖ListRowPresenter
中的onBindRowViewHolder
,获取标题的View
(通过View header = holder.getHeaderViewHolder().view;
)实现了这种级别的自定义。然后我们用header.getLayoutParams().height = rowItem.getRowHeaderHeight();
改变了它的高度。
使用同样的技术,您可以将页脚视图动态添加到holder.view
(使用addView
)。
另一种方法是遵循RowPresenter
的文档建议。相关引用是:
当 RowPresenter 的子类添加 UI 小部件时,它应该继承 RowPresenter.ViewHolder 并覆盖 createRowViewHolder(ViewGroup) 和 initializeRowViewHolder(ViewHolder)。子类必须为小部件使用布局 ID“row_content”,该小部件将与父片段中可能存在的任何 HeadersFragment 的标题对齐。
因此,使用这种新的推荐方法,您基本上可以提供自己的 xml。我相信你甚至可以继承ListRowPresenter
。要查看代码是如何工作的,请查看 ListRowView
以查看它为 R.layout.lb_list_row
扩展了 xml。然后它只使用R.id.row_content
的视图。
那将是holder.view
提供的实际视图,然后您可以在其上设置文本并做任何您想做的事情。
如果您需要任何进一步的说明,请告诉我。
【讨论】:
我最终扩展了 ListRowPresenter,并覆盖了 onBindViewHolder,尽管我必须添加一个检查以查看我的额外视图是否已添加(因为出于某种原因 onCreateView 被标记为最终视图)。我真的希望我能在 onCreate 上做,所以它肯定只做一次,而不是每次都检查,但我想这很好。至于自定义 Header,您知道是否有办法通过扩展leaback 主题、覆盖一些值并将该主题设置为您的活动来做到这一点? 这确实有效,我完全按照你们俩的建议做了。 你能告诉我一些你在 createRowViewHolder(ViewGroup) 中所做的代码以上是关于如何自定义 Leanback 的 ListRows?的主要内容,如果未能解决你的问题,请参考以下文章
Leanback DetailFragment FullWidthDetailsOverviewRowPresenter 自定义
如何在leanback BrowseFragment中实现两个PageRow之间的转换?
Android Leanback 库 HorizontalGridView scrollToPosition 不起作用