RecyclerView通过GridLayoutManager实现多样式布局的示例

 更新时间:2017年12月06日 09:25:51   作者:lygttpod  
本篇文章主要介绍了RecyclerView通过GridLayoutManager实现多样式布局的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一、开篇

距离上次写文章已经有段时间了,说实话真不知道最近在忙些什么,现在沉下心来把最近项目中遇到的问题记录下来便于以后遇到中使用吧!

废话不多说,先看一下效果图


二、需求解析

1、先说下项目需求,不管是好评还是差评下边的Tag标签有不同的展示类型,有的字数多的会单独占一行处理(这边其实也可以扩充,比如说两三个字的可以一行显示三个Tag标签),第一眼看到这个需求准备使用网上的开源库TagLayout去实现,但是尝试了一下后发现其实他们实现的效果同项目要的效果还是有蛮大差距的,可以看到效果图里边是要求文字是居中对齐的,左右对称的。

2、想到使用GridView实现这个功能,定义adapter去实现没问题,问题是什么时候显示一行什么时候显示两行三行并不能确定,毕竟有时候服务端返回的没有类型标示只有tag_name和tag_id,你要根据什么设置类型呐,而且自从recyclerview之后现在要是还用GridView的话岂不是太落伍了。下边就重点介绍一下使用recyclerview实现如图效果。

三、功能实现

我们知道recyclerview实现GridView效果只需配置一下参数就行了

  GridLayoutManager layoutManage = new GridLayoutManager(getContext(), 2);
  recycerView.setLayoutManager(layoutManage);

可以看到GridLayoutManager需要传递两个参数,一个是上下文对象,另一个是一行显示几列的参数常量,既然这个常量可以指定那么是不是这个值可以去控制呐,答案当然是yes

我们会注意到GridLayoutManager里边有个setSpanSizeLookup方法,本篇的重点就是这个方法(这个方法具体意义大家可以网上搜索,会有很多相关介绍,以及通过它实现一些复杂的布局,再次不做过多讨论)

   layoutManage.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
         @Override
         public int getSpanSize(int position) {
           return 0;
         }
       });

其实getSpanSize返回值就是控制每行有几列的,根据这个思路我们不妨试试。因为recyclerview填充数据是根据adapter实现的,我们就把给adapter的数据源同样在setSpanSizeLookup这个方法里边判断一下不就行了吗?
根据这个思路于是有了下面的代码

    /**
     * 如果单个item显示的字数大于指定某个值就显示一列 默认2列
     */

     //设置item数据大于多少字只显示一行 默认 超过九个字的程度只显示一列

     private static final int MAX = 9;

    private int setSpanSize(int position, List<TagBean> listEntities) {
      int count;
      if (listEntities.get(position).getTag_name().length() > MAX) {
        count = 2;
      } else {
        count = 1;
      }

      return count;
    }

    layoutManage.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
               @Override
               public int getSpanSize(int position) {
                 return setSpanSize(position,list);
               }
             });

核心代码就这么多,我们可以根据自己的需求随意定制样式

最后奉上源码地址:https://github.com/lygttpod/AndroidCustomView

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android Studio 导入新工程项目图解

    Android Studio 导入新工程项目图解

    这篇文章主要介绍了Android Studio 导入新工程项目图解,需要的朋友可以参考下
    2017-12-12
  • Android AlertDialog自定义样式实现代码

    Android AlertDialog自定义样式实现代码

    这篇文章主要介绍了Android AlertDialog自定义样式实现代码的相关资料,这里提供了实例代码,一个简单示例,需要的朋友可以参考下
    2016-12-12
  • Android中的Intent Filter匹配规则简介

    Android中的Intent Filter匹配规则简介

    这篇文章主要为大家详细介绍了Android中的Intent Filter匹配规则,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • Android高性能日志写入方案的实现

    Android高性能日志写入方案的实现

    这篇文章主要给大家介绍了关于Android高性能日志写入方案的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • Android Bitmap的加载与缓存

    Android Bitmap的加载与缓存

    这篇文章主要介绍了Android Bitmap的加载与缓存的相关资料,需要的朋友可以参考下
    2018-03-03
  • Android自定义view实现滑动解锁效果

    Android自定义view实现滑动解锁效果

    这篇文章主要为大家详细介绍了Android自定义view实现滑动解锁效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • Kotlin类型系统竟如此简单

    Kotlin类型系统竟如此简单

    这篇文章主要给大家介绍了关于Kotlin类型系统的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Kotlin具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Android底部导航栏的三种风格实现

    Android底部导航栏的三种风格实现

    这篇文章主要介绍了Android底部导航栏的三种风格实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Android自定义边缘凹凸的卡劵效果

    Android自定义边缘凹凸的卡劵效果

    这篇文章主要介绍了Android自定义边缘凹凸的卡劵效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Android实现带签到赢积分功能的日历

    Android实现带签到赢积分功能的日历

    这篇文章主要为大家详细介绍了Android实现带签到赢积分功能的日历,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论