Android TV Leanback VerticalGridView在开始时保持重点

时间:2018-11-28 11:38:34

标签: android rows android-tv leanback

我正在开发Leanback应用程序,并且已经通过VerticalGridView实现了行和所有内容,并且一切正常。

就目前而言,当我在该行中的项目中左右移动时,已聚焦的项目将移至屏幕中间并获得焦点。

示例-

enter image description here

我希望重点突出的项目停留在行的开头而不是中间。

示例-

enter image description here

在网上找不到任何东西。 真的很感谢有关此的任何信息。

5 个答案:

答案 0 :(得分:1)

面对同样的问题,并使用自定义ListRowPresenter解决了该问题:

override fun createRowViewHolder(parent: ViewGroup): RowPresenter.ViewHolder {
        val viewHolder = super.createRowViewHolder(parent)

        val itemWidth = parent.resources.getDimensionPixelSize(R.dimen.epg_program_width)

        with((viewHolder as ListRowPresenter.ViewHolder).gridView) {
            itemAlignmentOffset = parent.width / 2 - itemWidth / 2 - paddingLeft
        }

        return viewHolder
    }

答案 1 :(得分:1)

如果您还希望将行的最后一项显示在开头,请使用此ListRowPresenter:

class FocusedItemAtStartListRowPresenter(focusZoomFactor: Int) : ListRowPresenter(focusZoomFactor) {
    override fun createRowViewHolder(parent: ViewGroup): RowPresenter.ViewHolder {
        val viewHolder = super.createRowViewHolder(parent)

        with((viewHolder.view as ListRowView).gridView) {
            windowAlignment = BaseGridView.WINDOW_ALIGN_LOW_EDGE
            windowAlignmentOffsetPercent = 0f
            windowAlignmentOffset = parent.resources.getDimensionPixelSize(R.dimen.lb_browse_padding_start)
            itemAlignmentOffsetPercent = 0f
        }

        return viewHolder
    }
}

这与Leanback启动器的操作类似。

答案 2 :(得分:1)

要完成 tvlauncher,您还需要设置:

fadingLeftEdge = true // to fade previous item out

但最好使用他们的FadingEdgeContainer,因为衰落边缘并不完全相同。

像这样:https://github.com/bosphere/Android-FadingEdgeLayout

答案 3 :(得分:0)

您可能想尝试此方法:

val input = generateSequence(::readLine)
val lines = input.toList()

Reference

答案 4 :(得分:0)

因此,最终我没有找到任何内置的方法来实现对行开头而不是中间行的关注。 我最后要做的是一个真正的解决方法。请记住这一点。

我的解决方案是在每行的开头和结尾添加一些空项目,并使整行的边距为负。是什么使应该位于行中间的焦点看起来像开始时那样。 空卡仅在其自定义视图中具有一个标记,其中提到该卡为空卡,然后在所显示的onBindViewHolder中检查它是否为空卡,如果是,则将其发送给在视图持有人中创建的函数该卡片及其视图不可见且可突出显示为假。

再一次,这是一种解决方法,但是它完全可以按预期工作。