开发Android TV应用程序时,我遇到了Leanback支持库提供的BrowseFragment使用问题。 我们可以更改RowsFragment项目之间的边距吗?
答案 0 :(得分:8)
您可以覆盖某些样式来实现此目的,例如:
<style name="AppTheme.Leanback" parent="Theme.Leanback">
..
<item name="rowHorizontalGridStyle">@style/TvHorizontalGridView</item>
..
</style>
<style name="TvHorizontalGridView" parent="Widget.Leanback.Row.HorizontalGridView">
<item name="horizontalMargin">@dimen/margin_medium</item>
<item name="verticalMargin">@dimen/margin_medium</item>
</style>
其中@dimen/margin_medium
是您想要的保证金的大小。
答案 1 :(得分:7)
我自己找到了答案。键是HorizontalGridView,它存储每个行项列表。我们可以通过R.id.row_content获取这个HorizontalGridView的引用。最后,setItemMargin方法就是这个的解决方案。 下面是一个示例代码,我可以获得顶级图像。
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
HorizontalGridView horizontalGridView = (HorizontalGridView) parent.findViewById(R.id.row_content);
horizontalGridView.setItemMargin(400); // You can set item margin here.
...
};
答案 2 :(得分:1)
理想情况下覆盖样式细节,如@Billy所回答。不幸的是,它可能需要一段时间来弄清楚什么是什么。如果您要查找的内容不具有样式,您可以显然覆盖内置的leanback资源(不确定是否可靠/安全)。例如:
<dimen name="lb_browse_rows_margin_top">167dp</dimen>
<dimen name="lb_browse_item_vertical_spacing">8dp</dimen>
<dimen name="lb_browse_expanded_row_no_hovercard_bottom_padding">28dp</dimen>
答案 3 :(得分:0)
我遇到了一个需要在ListRow中实现无限滚动的情况。另外,我需要在每个最后一个项目之后添加额外的空间。因此,我通过向适配器的presenterSelector中添加自定义演示者来解决了这个问题:
class EmptySpacePresenter : Presenter() {
override fun onCreateViewHolder(parent: ViewGroup): ViewHolder {
val emptySpaceView = FrameLayout(parent.context).apply {
val width = context.resources.getDimension(R.dimen.gallery_carousel_horizontal_gap).toInt()
layoutParams = FrameLayout.LayoutParams(width, FrameLayout.LayoutParams.MATCH_PARENT)
isClickable = false
isFocusable = false
isFocusableInTouchMode = false
}
return ViewHolder(emptySpaceView)
}
override fun onBindViewHolder(viewHolder: ViewHolder?, item: Any?) = Unit
override fun onUnbindViewHolder(viewHolder: ViewHolder?) = Unit
}
class MyObjectAdapter() : ArrayObjectAdapter() {
init {
presenterSelector = ClassPresenterSelector()
.addClassPresenter(ListItem::class.java, ListItemPresenter())
.addClassPresenter(EmptySpace::class.java, EmptySpacePresenter())
}
}