Android TV Leanback RowsFragment 在开头保持焦点项目
Android TV Leanback RowsFragment keep focused item at the start
我正在开发 Leanback 应用程序,我已经通过 RowsFragment
实现了行和所有内容,并且一切正常。
至于现在,当我在行中的项目中左右移动时,获得焦点的项目会移动到屏幕中间并获得焦点。
例子-
我希望焦点项目位于行的开头而不是中间。
例子-
在网上找不到任何关于此的内容。
非常感谢有关此的任何信息。
您可能想试试这个方法:
void setSelectedPositionSmooth (int position)
遇到同样的问题并使用自定义 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
}
如果您还希望行的最后一项出现在开头,请使用此 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 启动器的功能类似。
要完成 tvlauncher,您还需要设置:
fadingLeftEdge = true // to fade previous item out
但更好的是使用他们的 FadingEdgeContainer,因为衰落边缘并不完全相同。
我正在开发 Leanback 应用程序,我已经通过 RowsFragment
实现了行和所有内容,并且一切正常。
至于现在,当我在行中的项目中左右移动时,获得焦点的项目会移动到屏幕中间并获得焦点。
例子-
我希望焦点项目位于行的开头而不是中间。
例子-
在网上找不到任何关于此的内容。 非常感谢有关此的任何信息。
您可能想试试这个方法:
void setSelectedPositionSmooth (int position)
遇到同样的问题并使用自定义 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
}
如果您还希望行的最后一项出现在开头,请使用此 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 启动器的功能类似。
要完成 tvlauncher,您还需要设置:
fadingLeftEdge = true // to fade previous item out
但更好的是使用他们的 FadingEdgeContainer,因为衰落边缘并不完全相同。