Android TV:VerticalGridFragment行项目对齐

4
我在我的Android TV项目中遇到了一个问题,即子类化VerticalGridFragment:一切都正常,但如果一行中的项少于最大列数,则这些项会水平对齐,从中心开始。
奇怪的是,只有总元素数小于最大列数时才会发生这种情况。例如,假设此数字为6,如果我只有1个项目,则它位于该行的中心。相反,如果我有14个项目,则第三行上的2个项目从左侧开始放置。

issue

有没有一种方法可以将一行中的项目对齐到 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(<item>的父级)本身的宽度吗?我怀疑VerticalGridView本身宽度较小且居中对齐。 - corochann
@corochann 谢谢您的快速反馈!很好的建议,我会检查一下这个问题,也许您是对的。奇怪的是(假设列数为6):当有1-5个项目时,它们居中显示,例如有7个项目时,第二行中的一个正确地靠在左边。但也许是因为第一行的6个项目强制VerticalGridView填充父级容器。 - fasteque
@corochann 你是对的,我已经子类化了VerticalGridPresenter以为VerticalGridView提供自己的布局,其中我将宽度设置为match_parent。现在项目在左边,即使我在右边看到更多的空白空间。但这只是一个小问题。如果你在下面提供一个实际的答案,我会接受它。再次感谢。 - fasteque
很好,问题解决了! - corochann
@fasteque,你能解释一下如何实现吗?另外,请查看我的评论,了解一下我的当前代码情况。 - Jain Nidhi
1
@JainNidhi 请看这里开始:https://github.com/fasteque/leanback-extensions/blob/master/leanback-extensions/src/main/java/com/fasteque/leanback/widget/presenter/JustifiedVerticalGridPresenter.java。虽然不是最新的,但应该能给你一些指导。 - fasteque
3个回答

4
也许 VerticalGridView 本身,即 <item> 的父级,宽度更小且居中对齐。
你可以尝试将 VerticalGridView 的宽度设置为 match_parent(参见 fasteque 的评论)。

那很有帮助。 - skygeek
VerticalGridPresenter gridPresenter = new VerticalGridPresenter(FocusHighlight.ZOOM_FACTOR_NONE, false); gridPresenter.setShadowEnabled(false); gridPresenter.setNumberOfColumns(NUM_COLUMNS); setGridPresenter(gridPresenter);我在哪里可以将VerticalGridView的宽度设置为match_parent? - Jain Nidhi

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);
}

2

只需在您的清单文件和布局文件中添加 android:orientation=vertical 即可尝试


如何在清单文件中设置 android:orientation=vertical?实际上并没有这样的属性。你可以使用 android:screenOrientation 属性,但不能设置为 vertical 值。 - fasteque
请查看这个SO答案,它将支持在清单中添加方向。希望这可以帮助到您。 - Mr.Rebot
@Mr.Rebot,您可以设置为portrait而不是vertical。另外,由于这是一款电视应用程序,我需要将其设置为landscape - fasteque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接