You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何缩小无缩放效果BrowseFragment两行间的多余间距?

解决BrowseFragment无缩放时Row首尾多余间距的问题

我之前也碰到过这个问题——关闭缩放效果后,BrowseFragment里相邻两行的首尾之间会出现莫名的多余间距,直接覆盖系统维度参数有时候确实不生效,试试下面这几个方案:

1. 优先尝试覆盖Leanback的系统维度参数

Leanback库本身定义了控制Row间距的维度值,你需要在自己项目的dimens.xml文件里同名覆盖这些值,注意要放在适配Android TV的资源目录(比如values-v21)下,确保优先级高于库自带的资源:

<!-- 控制Row与Row之间的垂直间距 -->
<dimen name="leanback_row_vertical_spacing">6dp</dimen>
<!-- 控制单个Row内容区的上下内边距 -->
<dimen name="leanback_row_content_padding_top">3dp</dimen>
<dimen name="leanback_row_content_padding_bottom">3dp</dimen>

如果之前覆盖没生效,检查下是不是维度名称写错了,或者资源目录的优先级不对。

2. 自定义ListRowPresenter来精确控制间距

如果覆盖维度还是没效果,那可以直接自定义Row的渲染Presenter,手动设置间距:

class CustomListRowPresenter : ListRowPresenter() {
    override fun onCreateViewHolder(parent: ViewGroup): Presenter.ViewHolder {
        val viewHolder = super.onCreateViewHolder(parent)
        // 设置Row之间的垂直间距
        setRowVerticalSpacing(parent.resources.getDimensionPixelSize(R.dimen.custom_row_spacing))
        // 调整Row内部的上下内边距
        val rowView = viewHolder.view as ListRowView
        rowView.setPadding(
            rowView.paddingLeft,
            parent.resources.getDimensionPixelSize(R.dimen.custom_row_padding_top),
            rowView.paddingRight,
            parent.resources.getDimensionPixelSize(R.dimen.custom_row_padding_bottom)
        )
        return viewHolder
    }
}

然后在给BrowseFragment设置Adapter时,指定使用这个自定义Presenter:

val browseAdapter = object : ArrayObjectAdapter() {
    override fun getPresenter(item: Any): Presenter {
        return if (item is ListRow) {
            CustomListRowPresenter()
        } else {
            super.getPresenter(item)
        }
    }
}
browseFragment.adapter = browseAdapter

3. 直接操作内部的VerticalGridView

BrowseFragment内部是用VerticalGridView来承载所有Row的,你可以直接找到这个View并设置它的垂直间距:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    // 找到Leanback内部的VerticalGridView
    val verticalGridView = view.findViewById<VerticalGridView>(R.id.browse_rows)
    verticalGridView?.apply {
        setVerticalSpacing(resources.getDimensionPixelSize(R.dimen.custom_row_spacing))
    }
}

这个方法比较直接,适合快速调试间距效果。

内容的提问来源于stack exchange,提问作者Uniruddh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:01:19