6

我想在 Android 中构建一个异构网格小部件,就像用于平板电脑或 Pinterest 的 Google+ 等应用程序一样。我找不到任何教程,而且似乎特别困难。

在此处输入图像描述

不幸的是GridView,我想获得不同大小的单元格时,只能有相同大小的单元格。你能指点我任何好的教程吗?我只知道我必须延长AbsListView.

4

1 回答 1

0

根据物品高度的可变性,您有几个选择:

  1. 如果您希望GridView使用多种高度变化(例如 Pinterest),您应该使用StaggeredGridView - 据我所知,它是目前最好的开源解决方案。

  2. 在您发布的图像中,看起来好像有具有可变高度子级的父行 - 这是一个更容易解决的问题,可以通过使用常规 ol'ListViewBaseAdapter. 写出这个代码对于一个 SO 答案来说太复杂了,但我会概述一下我如何实现这种效果。

    • 必须提前确定每行的BaseAdapter粗略布局,以便它可以向列表视图报告它需要多少行 - 您需要覆盖getCount()
    • getView()您的适配器中,您将膨胀单个LinearLayout(或者如果它已被回收,则可能使用 convertView )并添加尽可能多的孩子(再次,更多LinearLayouts),因为您需要设备的宽度(您应该在运行时弄清楚这一点,除非您只想创建手机和平板电脑版本)。
    • 添加到该行的每个子LinearLayout项都应设置为 weight=1,以便它们伸展到父行的整个宽度。在您发布的屏幕截图中,有 3 列(第三个 id 被截断)。
    • LinearLayout您刚刚添加到行中的每个子项代表一列。您应该将它们的方向设置为垂直,因为它们是列!
    • 在每一列中,如果您要添加一个子项,您将拥有一个网格视图。
    • 如果您希望达到上述效果,您可以在每列中添加更多项目。
    • 例如,第 1 行,第 1 列有一个大的孩子。第 1 行中的第 2 列和第 3 列都有 2 个半高子项。
于 2013-04-01T22:24:24.947 回答