地表最强 RecyclerView 分割线 Y_DividerItemDecoration 2.0

栏目: IOS · Android · 发布时间: 7年前

内容简介:地表最强 RecyclerView 分割线 Y_DividerItemDecoration 2.0

前言

自上一次发表 《妈妈再也不用担心我的Recyclerview分割线了》 一转眼已经过去两个多月了,中间很多网友提了不少问题和期望。这段时间一直在起早贪黑的赶项目,有时候闲下来偷偷优化了代码但是没提交到github,也没时间写文档。昨天项目第一阶段刚结束我就静下心来将代码重新进行了梳理和改造。写完我就感觉如果上次 1.0 是《妈妈再也不担心》系列的话,那这一次 2.0 称为《地表最强》系列绝不为过。

首先,再次抛出我对分割线最终奥义的理解。

分割线的奥义

无外乎两点:

  • 在哪里显示(哪个Item?Item的上下左右?)
  • 显示什么 (宽多少?啥颜色?padding?...)

1.0 版和 2.0 版最大的区别在于,1.0 对分割线的控制粒度只细分到了每个条目,而 2.0 版是可以单独精确的控制到每一个条目的每一条边的,跟分割线的最终奥义已经很接近了,你说牛逼不牛逼。

先上项目地址...

Y_DividerItemDecoration 项目地址

Y_DividerItemDecoration

接下来我们来详细看一下 2.0 版到底有哪些牛逼的特性...

2.0 Features

  • LinearLayoutManager和GridViewLayoutManager通用
  • 以每个item的上、下、左、右每条边为控制单位
  • 可以单独控制每边是否显示
  • 可以单独控制每边的颜色
  • 可以单独控制每边的宽度
  • 可以单独控制每边的 startPadding 和 endPadding

来看效果图

地表最强 RecyclerView 分割线 Y_DividerItemDecoration 2.0
图1 LinearLayoutManager
地表最强 RecyclerView 分割线 Y_DividerItemDecoration 2.0
图2 大分割线GridViewLayoutManager
地表最强 RecyclerView 分割线 Y_DividerItemDecoration 2.0
图2 普通GridViewLayoutManager
地表最强 RecyclerView 分割线 Y_DividerItemDecoration 2.0
图3 异型GridViewLayoutManager

已解决的 1.0 时存在的问题

  1. 不能设置分割线的padding(如图1)
  2. 分割线作为ItemDecoration占用了item的宽度,分割线细的时候不明显,分割线宽的时候可明显看到有无分割线的item宽度明显不一样(解决方案是将中间分割线的宽度分摊到两边的item上,如图2)

Usage

之所以版本号一下提到了 2.0 ,还有一个很重要的原因就是使用的API发生了很大改变,使用了建造者模式(话说现在不使用建造者模式的开源项目还能叫用户友好的开源项目吗?小调侃一下,勿喷 0.0),更科学清晰了,对比起来 1.0 就是乡村野夫。

Step 1

将依赖加入你项目的build.gradle中:

compile 'com.yanyusong.y_divideritemdecoration:y_divideritemdecoration:2.0'

Step 2

新建一个对象实现抽象类 Y_DividerItemDecoration ,在 getDivider(int itemPosition) 中定义在itemPosition时条目的分割线情况,有无、颜色、宽度、startpadding 和 endpadding 。

private class DividerItemDecoration extends Y_DividerItemDecoration {

        private DividerItemDecoration(Context context) {
            super(context);
        }

        @Override
        public Y_Divider getDivider(int itemPosition) {
            Y_Divider divider = null;
            switch (itemPosition % 2) {
                case 0:
                    //每一行第一个显示rignt和bottom
                    divider = new Y_DividerBuilder()
                            .setRightSideLine(true, 0xff666666, 10, 0, 0)
                            .setBottomSideLine(true, 0xff666666, 20, 0, 0)
                            .create();
                    break;
                case 1:
                    //第二个显示Left和bottom
                    divider = new Y_DividerBuilder()
                            .setLeftSideLine(true, 0xff666666, 10, 0, 0)
                            .setBottomSideLine(true, 0xff666666, 20, 0, 0)
                            .create();
                    break;
                default:
                    break;
            }
            return divider;
        }
    }

Step 3

给RecyclerView添加刚才实现的ItemDecoration

recyclerView.addItemDecoration(new DividerItemDecoration(this));

赞赏

如果Y_DividerItemDecoration节省了你大量的时间,可否给我买一袋咖啡,让我更加有动力去把它做得更好呢,谢谢!:blush:

地表最强 RecyclerView 分割线 Y_DividerItemDecoration 2.0
支付宝

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

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人本界面

人本界面

(美)拉斯基(Jef Raskin) / 史元春 / 机械工业出版社 / 2004-1-1 / 28.0

如果我们想克服目前人机界面上的固有缺陷,就很有必要理解本书的教义;若无此愿望,读读也无妨。交互设计的许多重要方面此书并没有包括在内,因为许多文献中都已经有详尽的阐述。本书的意图是补充现有的界面设计的方法或预测未来。  本书概述了人机界面设计领域的研究成果,详细论证了界面设计思想应以认知学为基础,并考虑人类的心智特点,在指出当前界面设计中弊端的同时,提出了新产品开发的思路。本书集计算机科学、人体工程......一起来看看 《人本界面》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具