SmartTable
一款android自动生成表格框架
功能介绍
- 快速配置自动生成表格;
- 自动计算表格宽高;
- 表格列标题组合;
- 表格固定左序列、顶部序列、第一行、列标题、统计行;
- 自动统计,排序(也可自定义统计规则);
- 表格图文、序列号、列标题格式化;
- 表格各组成背景、文字、网格、padding等配置;
- 表格批注;
- 表格内容、列标题点击事件;
- 缩放模式和滚动模式;
- 支持注解模式。
- 1.4版本
- 删除设置固定第一列setFixedFirstColumn方法,column的setFixed(boolean fixed)来固定任意列。
- 支持首尾动态添加数据SmartTable.addData(List t,boolean isFoot)来实现添加数据.实现增量解析数据和计算表格大小,效率更高。
- 1.3版本
- 设置单个格子背景
在网上参考了
html
的table
,发现样式好看多了,按到这个思路,SmartTable增加了支持对单个格子的不同背景支持,在TableConfig
里面有5个IBackgroundFormat
样式,可以根据boolean isDraw(T t)
返回数据做出判断是否绘制背景drawBackground
,默认绘制整个背景,当然你可以自己定义IBackgroundFormat
使用其他形状。
- 设置单个格子字体
由于支持到单个格子背景的支持,字体颜色也需要根据背景还进行调整,所以又支持单个格子的字体设置,
IBackgroundFormat
中有int getTextColor(T t)
,你只需重写它,根据需求设置不同颜色。
- 分页
在客户端太多数据体验不好,所以开发分页模式,在未使用注解情况下,只需要使用
PageTableData
分页表格数据类 代替之前TableData
表格数据类即可,使用PageTableData
的setPageSize
方法设置每页数量。分页就完成了。 如果你使用注解,请在@SmartTable
注解元素添加pageSize
属性即可,setData会返回PageTableData
对象,你可以使用它完成后面其他的设置。
- 其他
SmartTable 增加notifyDataChanged方法用于重新解析计算布局;
提供back方法fling到原点;
增加网络请求图片显示例子。
如何使用
- 引用
- Step 1. 添加 JitPack repository 到你的build文件
allprojects {
repositories {
...
maven { url 'https://www.jitpack.io' }
}
}
- Step 2. 增加依赖
dependencies {
compile 'com.github.huangyanbin:SmartTable:1.1'
}
- 使用表格View
<com.bin.david.form.core.SmartTable
android:id="@+id/table"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
- 注解模式
- 在您需要生成的表格的类增加注解
@SmartTable(name="表名")
- 在你需要显示的字段增加注解
// id为该字段所在表格排序位置
@SmartColumn(id =1,name = "列名")
//如果需要查询到该成员变量里面去,通过设置type实现
@SmartColumn(type = ColumnType.Child)
- 设置表格数据
table = findViewById(R.id.table);
table.setData(list);
注解模式就是这么简单,你可以直接运行查看效果了。当然这只是注解基本配置,注解里面还有自动统计,列组合等,如果你想要了解注解更多,请查看demo.
- 基本模式
//普通列
Column<String> column1 = new Column<>("姓名", "name");
Column<Integer> column2 = new Column<>("年龄", "age");
Column<Long> column3 = new Column<>("更新时间", "time");
Column<String> column4 = new Column<>("头像", "portrait");
//如果是多层,可以通过.来实现多级查询
Column<String> column5 = new Column<>("班级", "class.className");
//组合列
Column totalColumn1 = new Column("组合列名",column1,column2);
//表格数据 datas是需要填充的数据
final TableData<User> tableData = new TableData<>("表格名",userList,totalColumn1,column3);
//设置数据
table = findViewById(R.id.table);
//table.setZoom(true,3);是否缩放
table.setTableData(tableData);
- 基本方法介绍
Column
构造方法中还有两个参数IFormat<T>
,IDrawFormat<T>
。其中IFormat<T>
是用于格式化显示文字,比如User
对象中有更新时间字段time
时间戳。我们想要显示不同格式,就可以重写该方法。IDrawFormat<T>
是用于显示绘制格式化,比如User
对象中有头像字段portrait
时间戳,就可以使用该方法,框架提供几种IDrawFormat
包括(文字、Bitmap、Resoure图片、图文结合)。
Column
提供了
- 是否自动排序
setAutoCount(boolean isAutoCount)
- 是否反序排列
isReverseSort
- 设置排序比较
setComparator
- 统计格式化
setCountFormat
- 点击事件
OnColumnItemClickListener
TableData
中基本方法
- 设置排序列
setSortColumn
2. 设置列标题格式化settitleDrawFormat
3. 设置顶部序列号格式化setXSequenceFormat
4. 设置左边序列号格式化setYSequenceFormat
5. 设置是否显示统计setShowCount
TableConfig
中基本方法
- 设置内容文字样式
setContentStyle
2. 设置左边序列文字样式setYSequenceStyle
3. 设置顶部序列文字样式setXSequenceStyle
4. 设置列标题文字样式setColumnTitleStyle
5. 设置表格标题文字样式setTableTitleStyle
6. 设置统计行样式setCountStyle
7. 设置列标题网格样式setColumnTitleGridStyle
8. 设置表格网格样式setGridStyle
9. 设置网格列paddingsetVerticalPadding
10. 设置网格行paddingsetHorizontalPadding
11. 设置左序列背景setYSequenceBackgroundColor
12. 设置右序列背景setXSequenceBackgroundColor
13. 设置列标题背景setColumnTitleBackgroundColor
14. 设置内容背景setContentBackgroundColor
15. 设置统计行背景setCountBackgroundColor
16. 固定左侧setFixedYSequence
17. 固定顶部setFixedXSequence
18. 固定列标题setFixedTitle
19. 固定第一列setFixedFirstColumn
//1.4版本取消了 20. 固定统计行setFixedCountRow
总结
写完SmartChart之后,对android 绘图有了进一步的理解。开始了做SmartTable,开始只是一个小demo,经过一星期的上班偷着写,基本完成表格主要功能,本来还有合并等功能,由于后面没有采用,便只做了开始设计功能,已经满足日常需求。
android中使用表格的场景很少,主要屏幕一页放不下,用户体验不好。在实现过程中,尽量做到体验感好些,我感觉通过固定标题和第一行体验最好,所以默认设置固定。当然你可以自己设置。里面还有不少的坑,希望有需要的朋友可以使用它。
License
SmartTable is released under the Apache 2.0 license.
Copyright 2017 Huangyanbin.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at following link.
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitat