GridView是一个扩展 AdapterView的类,这意味着它可以有效地显示网格样式的单元格,并在用户滚动时回收旧视图以显示为新视图.
有时,您希望获得一个特殊的UI,它类似于Windows Phone Tiles UI,具有不同大小的单元格.
像这样的东西:
AABB
AACC
AADD
AADD
Run Code Online (Sandbox Code Playgroud)
每个字母代表其细胞的一部分,因此细胞A是2x4,细胞B和细胞C各占2x1,细胞D是2x2.
它可能甚至更多,其中单元格D比我所示的稍微高一点,并且在它下方有另一个单元格,因此D的末端和A的末尾不必对齐.
具有这种风格的应用程序的一个例子是pinterest.
GridView不允许这样的事情.
事实上,我尝试的每个解决方案都有问题.想问一下是否有其他替代品或更好的解决方案.
有多种方法可以解决此问题:
作为扩展AdapterView 的类,GridView可以为每个项目设置一个类型(使用BaseAdapter),这将允许您设置如何布局单元格.
但是,它仍会限制你,因为你会得到一排物品,一个在另一个之下.你必须让它们对齐.
GridLayout是一个相对较新的布局,它非常灵活.谷歌为它发布了一个很好的兼容性库,支持API7及更高版本.
但是,它不使用任何视图的回收,因此如果您希望显示大量项目,这是一个糟糕的选择.
如果您有很多项目,则需要为它们创建所有视图.
QuiltView库 - 从GridLayout扩展,所以基本上有类似的问题.
StaggeredGridView - 看起来最有前途,但有很多错误,特别是在改变方向时.这样的错误包括空单元格,坏滚动和NPE(罕见但仍然发生).我也不确定它是否支持单独使用自定义单元而不是imageView.
其他解决方案,如此处所述.
有谁知道这个问题的另一种替代方案?对于我展示的任何解决方案,可能有一些解决方法吗?
编辑:我认为关于StaggeredGridView,滚动和异常可以通过使用在getView中设置其大小的普通ImageView来解决.我认为它以一种奇怪的方式工作的原因是样本在从互联网加载后更新了imageview的大小.
但是,空单元格问题仍然存在于此库中.不仅如此,即使不改变方向,它们的尺寸也会发生很大变化.
编辑:目前,我认为最好的解决方案是使用 PinterestLikeAdapterView库.
它没有我能找到的任何问题.
但是,它不能使项目占用超过1个单元格宽度.尽管如此,这还是非常好的.
编辑:遗憾的是它与notifyDataSetChanged有问题.我在这里报道了这件事.
android cells android-gridview android-adapterview android-gridlayout
我想建立一个自定义列表(Pinterest网格布局),我想扩展AbsListView
.周围有很好的例子吗?这似乎非常困难.
谢谢托比亚