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 个项目从左侧开始放置。

有没有办法将一行中的项目与leftstart 对齐? 我做错了吗?

我尝试过这种方式,但没有任何反应,项目从中心开始对齐。

<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( 的父级)本身的宽度吗?我怀疑 VerticalGridView 本身的宽度较小并且与中心对齐。 @corochann 感谢您的快速反馈!好点,我会检查这一点,也许你是对的。奇怪的是(假设列数为 6):有 1-5 个项目,它们居中,例如 7 个项目,第二行中的项目正确位于左侧。但可能是因为第一行的 6 项强制 VerticalGridView 填充父项。 @corochann 你是对的,我将VerticalGridPresenter 子类化为VerticalGridView 提供我自己的布局,我将宽度设置为match_parent。现在这些项目在左边,即使我看到右边比左边更多的空白空间。但这是一个小问题。如果您在下面提供实际答案,我会接受。再次感谢。 很好,它解决了! @JainNidhi 请从这里开始查看:github.com/fasteque/leanback-extensions/blob/master/…。它不是最新的,但应该能给你一些指导。 【参考方案1】:

也许VerticalGridView 本身,&lt;item&gt; 的父级,宽度更小并与中心对齐。

您可以尝试将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开发总结TV上屏幕适配总结

Android TV 应用无法安装在 Android TV 设备上

Smart TV、Android TV 和 Fire TV 的一种语言

Android TV:如何使用 Leanbak 自定义 android TV 的左侧导航面板?

Android-TV 应用显示白屏

Android TV开发总结焦点