平板电脑教程的Google+ Android网格小部件

时间:2012-09-08 10:34:39

标签: android android-layout gridview google-plus pinterest

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

enter image description here

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

1 个答案:

答案 0 :(得分:0)

根据项目高度的变化程度,您可以选择以下几种方法:

  1. 如果您正在寻找具有多种高度变化的GridView(例如Pinterest),您应该使用StaggeredGridView - 据我所知,这是最好的开放源解决方案现在就在那里。

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

    • BaseAdapter必须提前确定每行的粗略布局,以便它可以向列表视图报告它需要多少行 - 您需要覆盖getCount()
    • 在你的适配器的getView()中,你会膨胀一个LinearLayout(或者如果它被回收,可能会使用convertView)并添加尽可能多的孩子(同样,更多LinearLayouts)将需要设备的宽度(您应该在运行时计算出来,除非您只想创建一个手机和平板电脑版本)。
    • 添加到行中的每个子LinearLayout应设置为weight = 1,以便它们伸展到父行的整个宽度。在您发布的屏幕截图中,有3列(第三个ID被截断)。
    • 您刚添加到该行的每个子LinearLayout代表一列。你应该将它们的方向设置为垂直,就像它们是列一样!
    • 在每列中,如果您要添加一个孩子,您将拥有一个gridview。
    • 如果您希望达到上述效果,可以为每列添加更多项目。
    • 例如,第1行第1列有一个大子项。第1行的第2列和第3列都有2个半身高的孩子。