网格视图行的外边距

32
我无法找到一种方法来为GridView行添加外部边距。我找到了setHorizontalSpacingsetVerticalSpacing属性,可以在GridView行之间添加内部填充,但不适用于行的外边框。
我想要得到的结果如同Google Play商店中显示的:

图片描述

谢谢!

你尝试过简单地为“GridView”添加填充(或边距)吗? - MH.
作为@MH,您可以添加具有与setVertical/HorizontalSpace相同值的android:paddingLeft/Right属性。缺点是该值是固定的,如果您设置了android:stretchMode="spacingWidth",则调整大小仅会修改内部间距。 - Cavaz
将填充添加到GridView可以按预期工作。但是,当项目开始滚动时,填充保持不变 - 即当其中一个项目悬挂在屏幕顶部时,在屏幕顶部和项目之间会有一个白色(在我的情况下)条带。如果边距在GridView内的项目上,则看起来会更好,但这些边距似乎不被尊重。 - Scott Roberts
我发现实现这个的唯一方法,要么使用ListView并添加逻辑来创建类似网格项的行,要么扩展ViewGroup并创建支持此功能的布局。我发现了这个库,它使用了第二种方法:https://github.com/thquinn/DraggableGridView - Diego Acosta
2个回答

95

您可以使用 android:clipToPadding=false 添加填充,当项目被滚动时不会保留。就像这样:

<GridView
    android:id="@+id/grid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:horizontalSpacing="16dp"
    android:verticalSpacing="16dp"
    android:padding="16dp"
    android:clipToPadding="false" />

如果您希望滚动条位于填充区域之外,请设置android:scrollbarStyle="outsideOverlay",感谢@Karl!


13
同时使用android:scrollbarStyle="outsideOverlay"。这会将滚动条放置在衬垫区域内,否则它会出现在衬垫之前。 - Karl
9
这真的很难找,也不是很直观。谢谢 :) - eliocs
谢谢。这也有助于防止当前选定的行由于电视超扫描而不在屏幕上显示。 - Brian F Leighty
如果我不想使用填充怎么办?因为我的HeaderGridView有一个标题,我希望它适合屏幕宽度! - Muhammad Babar

0
如果您想要像Google Play商店一样的结果,您可以设置setHorizontalSpacing和setVerticalSpacing,然后将layout_margin设置为GridView。

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