赞
踩
最近项目需求需要制作一个表格展示效果,先看下UI图吧:
刚开始接收到这个需求的时候,第一反应就是使用 RecyclerView 来进行实现,谁让 RecyclerView 那么牛逼呢?不用纠结 RecyclerView 完完全全可以实现这种效果,无外乎可能就是稍微复杂些
RecyclerView 实现思路:
- 最外层采用 HorizontalScrollView,保证表格可以左右进行滑动
- 内层使用 RecyclerView,而使用 RecyclerView 时需要使用到 getItemViewType 这个方法来规定条目的类型(第一行title以及合计可以认为是同一种类型,而“沈阳”那一个稍微大一点的条目可以认为是第二种类型
- 类型一:这个类型布局就非常简单了,采用 LInearLayout 就可以非常简单的实现
- 类型二:可以采用水平的 LinearLayout 包裹 TextView 以及 RecyclerView 来进行实现
上面仅仅是介绍了我最开始采用的方案,当然缺点非常多:
- 使用上面方案时,需要考虑列的宽度问题,要么宽度直接在布局中写死(每列中文字长度不一样,可能会出现第一行与第二行的列错位情况),要么根据服务器返回的数据动态获取每列中最长字符串所需要占用的宽度进行动态设置
- 表格一般都会存在排序功能(当然我这个项目中暂时还未出现),如果出现需要对列进行升序或降序排序,那就呵呵了,自己想办法去吧,想想都痛苦
说了这么多并不是贬低 RecyclerView 的意思,因为 RecyclerView 本身的定义就不是专门用来做这种复杂表格的(有说错的地方,欢迎在评论中留言),你让 RecyclerView 去实现这种效果就有点…….
先说一下 SmartTable 都支持的功能吧,具体例子后面再给出:
- 快速配置自动生成表格;
- 自动计算表格宽高
- 表格列标题组合
- 表格固定左序列、顶部序列、第一行、列标题、统计行
- 自动统计,排序(自定义统计规则)
- 表格图文、序列号、列标题格式化
- 表格各组成背景、文字、网格、padding 等配置
- 表格批注
- 表格内容、列标题点击事件
- 缩放模式和滚动模式
- 注解模式
- 内容多行显示
- 分页模式
- 首尾动态添加数据
- 丰富的格式化
- 支持二维数组展示(用于类似日程表,电影选票等)
- 导入 excel(支持颜色,字体,背景,批注,对齐,图片等基本 Excel 属性)
- 表格合并单元(支持注解合并,支持自动合并)
- 支持其他刷新框架 SmartRefreshLayout
- 可配置表格最小宽度(小于该宽度自动适配)
- 支持直接 List 或数组字段转列
- 支持 Json 数据直接转换成表格
- 支持表格网格指定行列显示
看介绍是不是感觉叼的不要不要的,不过呢,我也是刚使用这个框架,在这里也仅仅是介绍一些开发中常用的,其他的自己去尝试吧
allprojects {
repositories {
...
maven { url 'https://www.jitpack.io' }
}
}
dependencies {
compile 'com.github.huangyanbin:SmartTable:2.0'
}
SmartTable 的使用方式有两种:
- 采用注解的形式
- 基本模式,手动配置行与列
<com.bin.david.form.core.SmartTable
android:id="@+id/table"
android:layout_width="match_parent"
android:layout_height="match_parent" />
@SmartTable(name = "销售计划表")
public class UserInfo {
public UserInfo(String city, int name, int count, int restaurant, int ka, int wholesale, int industry, int other) {
this.city = city;
this.name = name;
this.count = count;
this.restaurant = restaurant;
this.ka = ka;
this.wholesale = wholesale;
this.industry = industry;
this.other = other;
}
// name:版块名称,count:目标值,restaurant:餐饮数量,ka:KA数量,wholesale:流通批发数量,industry:工业加工数量,other:其它数量
@SmartColumn(id = 0, name = "部门/渠道", autoMerge = true)
private String city;
@SmartColumn(id = 1, name = "板块")
private int name;
@SmartColumn(id =

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。