【问题标题】:Set margins between items on BrowseFragment在 BrowseFragment 上设置项目之间的边距
【发布时间】:2015-11-30 20:34:34
【问题描述】:

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

【问题讨论】:

  • 填充元素是一种解决方案吗?
  • 感谢您的快速回复,我终于找到了解决方案。

标签: android android-tv


【解决方案1】:

我自己找到了答案。关键是 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.

    ...

    };

【讨论】:

  • 如何设置列表行的垂直边距。你能帮我解决这个问题吗?
  • 试试((ViewGroup.MarginLayoutParams) horizontalGridView.getLayoutParams()).setMargins(0, 0, 0, 100); 可以自己改变horizo​​ntalGridView的margin。
  • 好的,我会试试的。你也可以告诉我如何设置白色边框以显示在行中的卡片?
  • 如何仅设置左侧第一项的边距?
  • 您不会将自己的答案标记为正确吗?它可以帮助很多其他人搜索
【解决方案2】:

您可以覆盖一些样式来实现这一点,例如:

<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 是您想要的边距大小。

【讨论】:

    【解决方案3】:

    最好覆盖@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>
    

    【讨论】:

    • 我建议为这些创建不同的样式,而不是覆盖默认资源,因为它们被大量重用。
    【解决方案4】:

    我有一个案例需要在 ListRow 中实现无限滚动。此外,我需要在每个最后一项之后添加额外的空间。所以我通过向适配器的 PresenterSelector 添加自定义 Presenter 来解决这个问题:

    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())
        }
    }
    

    【讨论】:

    • EmptySpace.class 包含什么?我在leanback 库中没有找到任何东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2012-07-05
    • 2017-01-04
    • 2012-06-30
    • 2011-03-27
    • 2016-02-06
    • 2017-03-09
    相关资源
    最近更新 更多