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

时间:2015-09-04 16:01:25

标签: android android-tv

开发Android TV应用程序时,我遇到了Leanback支持库提供的BrowseFragment使用问题。 我们可以更改RowsFragment项目之间的边距吗?

4 个答案:

答案 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)

enter image description here

我自己找到了答案。键是Horizo​​ntalGridView,它存储每个行项列表。我们可以通过R.id.row_content获取这个Horizo​​ntalGridView的引用。最后,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())
    }
}