Android GridLayoutManager 跨度大小

Mad*_*mar 2 android android-recyclerview

我正在使用 Recyclerview 和网格布局管理器在 android 中实现仪表板,其中连续 3 个项目。我将从服务器获取仪表板项目。根据项目的数量,我需要将Recyclerview项目调整到中心。例如,如果我有 11 个项目,我需要将最后 2 个项目与中心对齐。如果我有 10 个项目,最后一项需要居中对齐。对于这个逻辑我做了很多研究但没有找到任何解决方案。即使我尝试使用 GridLayoutManager 的 spansize 概念,但没有成功。任何帮助/示例代码将非常感激。提前致谢

Ben*_* P. 5

如果我正确理解您的要求,则无法使用RecyclerView+完成您想要的事情GridLayoutManager。即使您实现了自定义GridLayoutManager.SpanSizeLookup,您也只能将额外的一两个项目拉伸以填充该行...您无法将它们居中

但是,您可以通过使用RecyclerViewa来完成您想要的任务FlexboxLayoutManager,这是 Google FlexboxLayout项目的一部分: https: //github.com/google/flexbox-layout

当您创建 时FlexboxLayoutManager,您需要将 设为FlexDirection“行”并将JustifyContent设为“中心”:

FlexboxLayoutManager manager = new FlexboxLayoutManager(this, FlexDirection.ROW);
manager.setJustifyContent(JustifyContent.CENTER);
Run Code Online (Sandbox Code Playgroud)

然后,当您创建ViewHolders 时,需要将它们的大小设置为RecyclerViews 宽度的三分之一:

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View itemView = inflater.inflate(R.layout.item_view, parent, false);

    ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) itemView.getLayoutParams();
    layoutParams.width = (parent.getWidth() / 3) - layoutParams.leftMargin - layoutParams.rightMargin;
    itemView.setLayoutParams(layoutParams);

    return new MyViewHolder(itemView);
}
Run Code Online (Sandbox Code Playgroud)

以下是一个小型应用程序要点的链接,演示了这一点: https: //gist.github.com/zizibaloob/0c44bfe59b371b5ae0bd2edcb4a7e592