Android 不同单元格大小的gridView,pinterest样式 背景

Android 不同单元格大小的gridView,pinterest样式 背景,android,android-gridview,cells,android-adapterview,android-gridlayout,Android,Android Gridview,Cells,Android Adapterview,Android Gridlayout,是一个扩展类,这意味着它以网格样式高效地显示单元格,循环使用旧视图,在用户滚动时显示为新视图 问题 有时,您可能希望获得一个特殊的用户界面,它类似于Windows Phone Tiles用户界面,具有大小不同的单元格 大概是这样的: AABB AACC AADD AADD 每个字母代表其单元格的一部分,因此单元格a为2x4,单元格B和单元格C各取2x1,单元格D为2x2 它可能比这还要多,单元格D比我所展示的稍高一点,在它的正下方有另一个单元格,所以D的末端和a的末端不必对齐 具有此样式的应用

是一个扩展类,这意味着它以网格样式高效地显示单元格,循环使用旧视图,在用户滚动时显示为新视图

问题 有时,您可能希望获得一个特殊的用户界面,它类似于Windows Phone Tiles用户界面,具有大小不同的单元格

大概是这样的:

AABB
AACC
AADD
AADD
每个字母代表其单元格的一部分,因此单元格a为2x4,单元格B和单元格C各取2x1,单元格D为2x2

它可能比这还要多,单元格D比我所展示的稍高一点,在它的正下方有另一个单元格,所以D的末端和a的末端不必对齐

具有此样式的应用程序示例如下

GridView不允许这样的事情

事实上,我尝试过的每个解决方案都有问题。我想问一下,是否还有其他替代方案或更好的解决方案

我发现了什么 有多种方法可以处理此问题:

  • 作为一个扩展了的类,GridView能够为每个项目设置一个类型(使用),这将允许您设置单元格的布局方式

    但是,它仍然会限制您,因为您将获得一行项目,一行在另一行之下。你必须把它们对齐

  • 这是一个相对较新的布局,而且非常灵活。谷歌发布了一个很好的兼容库,支持API7及以上版本

    但是,它不使用任何视图循环,因此如果您希望显示大量项目,那么这是一个糟糕的选择

    如果有很多项,则需要为它们创建所有视图

  • -从GridLayout扩展而来,因此基本上也有类似的问题

  • -看起来最有希望,但有很多bug,尤其是在更改方向时。这些错误包括空单元格、错误滚动和NPE(虽然很少见,但仍然会发生)。我也不确定它是否支持自定义单元格而不是单独使用ImageView

  • 如前所述,其他解决办法

  • 问题 有人知道这个问题的另一个替代方案吗?也许我所展示的任何解决方案都有一些变通方法


    编辑:我认为关于StaggedGridView,滚动和异常可以通过使用普通的ImageView来解决,您可以在getView中设置它的大小。我认为它以一种奇怪的方式工作的原因是,该示例在从internet加载imageview后更新了它的大小

    然而,空单元格问题仍然存在于该库中。不仅如此,即使不改变方向,它们的大小也会发生很大的变化


    编辑:目前,我认为最好的解决方案是使用

    我找不到任何问题

    但是,它不能使项目占用超过1个单元格宽度。不过还是很好


    编辑:遗憾的是,它与notifyDataSetChanged存在问题。我已经报道过了。

    您可以通过一个列表视图来实现这一点,其中每个单元格包含一个不同的网格模板。我用这个技巧做了一些类似于你所描述的事情。如果单元格大小需要唯一,这将不起作用,但对于您描述的情况来说应该足够了:

    AABB
    AACC
    AADD
    AADD
    
    创建少量类似这样的模板,使用a、B、C、D的各种排列,然后您可以将它们随机用作ListView单元格,通过一些简单的偏移数学,您的适配器可以填充每个子单元格,以完成如下操作:

    AABB
    AACC
    AADD
    AADD
    
    BBBB
    ACCC
    ADDD
    ADDD
    
    AAAA
    BBCC
    BBCC
    DDDD
    
    AABB
    AACC
    AADD
    AADD
    
    AABB
    AACC
    DDDD
    DDDD
    

    现在回答有点晚吗

    从etsy查看此库。 看起来很有希望

    我认为这是新版本的

    更新

    试着使用谷歌的

        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(adapter);
    
    我认为一个with可以解决这个问题,如果你想拥有一个快速滚动条,你可以试试


    所以,不需要更多的技巧,因为谷歌提供了一个解决方案…

    我强烈推荐双同步ListView库。它比使用一个更有效GridView@bZea我已经提到了这个解决方案(列表中有5个)。它有很多问题。它不能对所有项目使用单个适配器。它不是流动的(一个接一个地滚动列表视图),也不是可定制的(无法设置列数)。有更多可能的方法来放置单元格,设备上的单元格数量可能会发生变化,因为有小型设备和大型设备(例如平板电脑),当设备位于横向而不是纵向时,您可能希望进行更改。虽然这是一个很好的解决方案,但我已经尝试了这两种方法,并且从默认配置判断,我认为它更好。在我的例子中,etsy可以很容易地与chris banes pull整合发布。他们说etsy缺少一些基本的东西:“StaggeredGridView不支持以下内容:项目选择器drawables、项目长按事件、滚动条、行分隔符、边缘效果、淡入边缘、Overscroll”怎么样:我仍然找不到任何好的小部件,例如,我试图实现交错的TridLayoutManager,但无法实现,看看我面临的问题。如果您找到了它的实现,您可以添加引用。谢谢