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