我想在 Android 中构建一个异构网格小部件,就像用于平板电脑或 Pinterest 的 Google+ 等应用程序一样。我找不到任何教程,而且似乎特别困难。
不幸的是GridView
,我想获得不同大小的单元格时,只能有相同大小的单元格。你能指点我任何好的教程吗?我只知道我必须延长AbsListView
.
我想在 Android 中构建一个异构网格小部件,就像用于平板电脑或 Pinterest 的 Google+ 等应用程序一样。我找不到任何教程,而且似乎特别困难。
不幸的是GridView
,我想获得不同大小的单元格时,只能有相同大小的单元格。你能指点我任何好的教程吗?我只知道我必须延长AbsListView
.
根据物品高度的可变性,您有几个选择:
如果您希望GridView
使用多种高度变化(例如 Pinterest),您应该使用StaggeredGridView - 据我所知,它是目前最好的开源解决方案。
在您发布的图像中,看起来好像有具有可变高度子级的父行 - 这是一个更容易解决的问题,可以通过使用常规 ol'ListView
和BaseAdapter
. 写出这个代码对于一个 SO 答案来说太复杂了,但我会概述一下我如何实现这种效果。
BaseAdapter
粗略布局,以便它可以向列表视图报告它需要多少行 - 您需要覆盖getCount()
。getView()
您的适配器中,您将膨胀单个LinearLayout
(或者如果它已被回收,则可能使用 convertView )并添加尽可能多的孩子(再次,更多LinearLayouts
),因为您需要设备的宽度(您应该在运行时弄清楚这一点,除非您只想创建手机和平板电脑版本)。LinearLayout
项都应设置为 weight=1,以便它们伸展到父行的整个宽度。在您发布的屏幕截图中,有 3 列(第三个 id 被截断)。LinearLayout
您刚刚添加到行中的每个子项代表一列。您应该将它们的方向设置为垂直,因为它们是列!