android - 如何自定义 Leanback 的 ListRows?

标签 android gridview android-tv leanback

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

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

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

最佳答案

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

我们需要自定义 ListRow 以向标题添加更多填充。我们通过重写 ListRowPresenteronBindRowViewHolder 实现了这种级别的自定义,获取标题的 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/

相关文章:

android - Espresso onData 执行点击多个项目

android - Leanback DetailFragment FullWidthDetailsOverviewRowPresenter 自定义

android - 我可以在没有 Google 帐户的情况下访问 Google Drive 文档吗?

android - getOrientation 中包含陀螺仪?

android - 动态改变渐变中心

asp.net - 向 ASP.NET Gridview 添加动态列

java - 如何调用在 Activity 中包含的 fragment 中初始化的适配器中的方法?

c# - 将一个 child 附加到网格,设置它的行和列

Android TV 靠背。如何判断用户是否在 MainActivity 的标题导航上?

android - 在 BrowseFragment 上设置项目之间的边距