首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android GridLayoutManager跨度大小

Android GridLayoutManager跨度大小
EN

Stack Overflow用户
提问于 2018-01-30 17:50:28
回答 2查看 2.7K关注 0票数 2

我正在用回收视图和网格布局管理器实现android中的仪表板,其中包含3项。我将从服务器获取仪表板项目。根据项目编号,我需要将回收项目调整为中心。例如,如果我有11个项目,我需要调整最后两个项目与中心。如果我有,10个项目,最后一个项目需要对齐中心。对于这个逻辑,我做了大量的研究,但没有找到任何解决办法。甚至我也尝试使用GridLayoutManager的spansize概念,但是没有运气。任何帮助/示例代码都是非常感谢的。提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-30 18:18:52

如果我正确地理解了您的需求,就无法用RecyclerView + GridLayoutManager实现您想要的结果。即使您实现了一个自定义的GridLayoutManager.SpanSizeLookup,您也只能让您的额外的一两项扩展来填充行.你不能把它们集中起来。

但是,您可以通过使用RecyclerViewFlexboxLayoutManager来实现您想要的结果,这是谷歌FlexboxLayout项目:https://github.com/google/flexbox-layout的一部分。

创建FlexboxLayoutManager时,需要将FlexDirection设置为"row“,将JustifyContent设置为”中间“:

代码语言:javascript
复制
FlexboxLayoutManager manager = new FlexboxLayoutManager(this, FlexDirection.ROW);
manager.setJustifyContent(JustifyContent.CENTER);

然后,在创建ViewHolder时,需要将其大小调整到RecyclerView宽度的三分之一:

代码语言:javascript
复制
@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);
}

下面是一个用于演示以下内容的小型应用程序gist的链接:https://gist.github.com/zizibaloob/0c44bfe59b371b5ae0bd2edcb4a7e592

票数 5
EN

Stack Overflow用户

发布于 2018-01-30 18:31:02

在您的spanSizeLookup上设置GridLayoutManage

代码语言:javascript
复制
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            if(ItemList.size() % 3 == 0){
                return 3;
            } else if( ItemList.size() % 3 == 2){
              return 2;
            } else{
              return 1; // number of items to span
            }
        }
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48527574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档