Android TV:VerticalGridFragment 行项目对齐
Posted
技术标签:
【中文标题】Android TV:VerticalGridFragment 行项目对齐【英文标题】:Android TV: VerticalGridFragment row items alignment 【发布时间】:2016-11-09 09:06:25 【问题描述】:我在我的 android TV 项目中遇到了子类化 VerticalGridFragment
的问题:一切正常,但如果一行中的项目少于最大列数,则项目从中心开始水平对齐。
奇怪的是,只有当元素总数小于最大列数时才会发生这种情况。例如,假设这个数字是 6,如果我有 1 个项目,它将被放置在行的中心。相反,如果我有 14 个项目,则第三行的 2 个项目从左侧开始放置。
有没有办法将一行中的项目与left
或start
对齐?
我做错了吗?
我尝试过这种方式,但没有任何反应,项目从中心开始对齐。
<style name="AppTheme.Widget.Leanback.GridItems.VerticalGridView"
parent="Widget.Leanback.GridItems.VerticalGridView">
<item name="android:gravity">left|start</item>
</style>
然后在我的主题中这样设置,从Theme.Leanback
延伸:
<item name="itemsVerticalGridStyle">@style/AppTheme.Widget.Leanback.GridItems.VerticalGridView</item>
【问题讨论】:
嗨@fasteque,我也不确定根本原因,但是您检查了 VerticalGridView(VerticalGridPresenter
子类化为VerticalGridView
提供我自己的布局,我将宽度设置为match_parent
。现在这些项目在左边,即使我看到右边比左边更多的空白空间。但这是一个小问题。如果您在下面提供实际答案,我会接受。再次感谢。
很好,它解决了!
@JainNidhi 请从这里开始查看:github.com/fasteque/leanback-extensions/blob/master/…。它不是最新的,但应该能给你一些指导。
【参考方案1】:
也许VerticalGridView
本身,<item>
的父级,宽度更小并与中心对齐。
您可以尝试将VerticalGridView
的宽度设置为match_parent
(参见fasteque 的cmets)。
【讨论】:
这很有帮助。 VerticalGridPresenter gridPresenter = new VerticalGridPresenter(FocusHighlight.ZOOM_FACTOR_NONE, false); gridPresenter.setShadowEnabled(false); gridPresenter.setNumberOfColumns(NUM_COLUMNS); setGridPresenter(gridPresenter);我可以在哪里将宽度 VerticalGridView 设置为 match_parent?【参考方案2】:尝试添加 安卓:方向=垂直 在您的清单和布局文件中
【讨论】:
如何在清单中设置android:orientation=vertical
?没有这样的属性。您可以设置android:screenOrientation
,但不能设置vertical
值。
检查这个SO answer,它将支持在清单中添加方向。希望这会有所帮助
@Mr.Rebot 你可以设置portrait
而不是vertical
。另外,因为它是电视的应用程序,所以我需要在landscape
中拥有它。【参考方案3】:
基于@corochann 和@fasteque 的答案。使用此方法可以更快地初始化VerticalGridPresenter
。
public class CustomVerticalGridPresenter extends VerticalGridPresenter
@Override
protected void initializeGridViewHolder(ViewHolder vh)
super.initializeGridViewHolder(vh);
VerticalGridView gridView = vh.getGridView();
ViewGroup.LayoutParams params = gridView.getLayoutParams();
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
gridView.setLayoutParams(params);
【讨论】:
以上是关于Android TV:VerticalGridFragment 行项目对齐的主要内容,如果未能解决你的问题,请参考以下文章
Android TV 应用无法安装在 Android TV 设备上
Smart TV、Android TV 和 Fire TV 的一种语言