如何在没有丑陋代码的情况下构建稍微复杂的 recyclerview 布局?
How to build somewhat complicated recyclerview layout without ugly codes?
上图是我正在搭建的,我已经完成了默认布局。我使用 GridLayoutManager
和一个简单的公式 (position - 3 * (position / 3)
) + switch
来计算每个单元格的跨度,然后适配器也调用相同的公式来相应地获得结果以使用正确的布局文件:1:1 或 16:9(使用 ConstraintLayout
+ ImageView
)。还有一个ItemDecoration
在每个单元格之间添加4dp的白色space。
现在当我开始构建最小的 width = 600 配置时,出现了一些问题:由于每个元素之间有一个小间距,较宽的尺寸实际上比 2:1 略窄,这意味着较宽的单元格将比 1:1 单元格略高。例如,当两幅图像之间有 4dp 的边距时,600dp 中较宽单元格的完美比例应该是 398:198。
我知道我总是可以将多个布局文件合并为 1 以确保每一行都具有相同的高度,但是由于我想继续添加更多配置,代码可能会在结尾。所以我的问题是:
1) GridLayoutManager 可以实现吗?如果是,怎么做?
2) 即使 GridLayoutManager 可以做到这一点,有没有更好的方法来做到这一点?也许是自定义 LayoutManager?
是的,您可以使用 GridLayoutManager 执行此操作,但它很复杂。 Android 提供 StaggeredGridLayoutManager 来实现此类视图。使用 recyclerview 很容易实现。
StaggeredGridLayoutManager mLayoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
yourRecyclerView.setLayoutManager(mLayoutManager);
//set adapter to recyclerview
例如
https://android--code.blogspot.in/2015/12/android-recyclerview.html
官方文档:
https://developer.android.com/reference/android/support/v7/widget/StaggeredGridLayoutManager.html
啊哈,当然已经有一个库可以做到这一点:https://github.com/Arasthel/SpannedGridLayoutManager
仍在尝试,但到目前为止它似乎完全符合我的需要!
GridLayoutManager
和一个简单的公式 (position - 3 * (position / 3)
) + switch
来计算每个单元格的跨度,然后适配器也调用相同的公式来相应地获得结果以使用正确的布局文件:1:1 或 16:9(使用 ConstraintLayout
+ ImageView
)。还有一个ItemDecoration
在每个单元格之间添加4dp的白色space。
现在当我开始构建最小的 width = 600 配置时,出现了一些问题:由于每个元素之间有一个小间距,较宽的尺寸实际上比 2:1 略窄,这意味着较宽的单元格将比 1:1 单元格略高。例如,当两幅图像之间有 4dp 的边距时,600dp 中较宽单元格的完美比例应该是 398:198。
我知道我总是可以将多个布局文件合并为 1 以确保每一行都具有相同的高度,但是由于我想继续添加更多配置,代码可能会在结尾。所以我的问题是:
1) GridLayoutManager 可以实现吗?如果是,怎么做?
2) 即使 GridLayoutManager 可以做到这一点,有没有更好的方法来做到这一点?也许是自定义 LayoutManager?
是的,您可以使用 GridLayoutManager 执行此操作,但它很复杂。 Android 提供 StaggeredGridLayoutManager 来实现此类视图。使用 recyclerview 很容易实现。
StaggeredGridLayoutManager mLayoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
yourRecyclerView.setLayoutManager(mLayoutManager);
//set adapter to recyclerview
例如 https://android--code.blogspot.in/2015/12/android-recyclerview.html
官方文档:
https://developer.android.com/reference/android/support/v7/widget/StaggeredGridLayoutManager.html
啊哈,当然已经有一个库可以做到这一点:https://github.com/Arasthel/SpannedGridLayoutManager
仍在尝试,但到目前为止它似乎完全符合我的需要!