1.简单使用SmartTable

愿你出走半生,归来仍是少年! 

环境:Android Studio

        在android上进行统计数据、列表、表格数据等信息展示是常有的需求。

        在Github上有一个优秀的控件:smartTable

1.功能介绍

  1. 快速配置自动生成表格;
  2. 自动计算表格宽高;
  3. 表格列标题组合;
  4. 表格固定左序列、顶部序列、第一行、列标题、统计行;
  5. 自动统计,排序(自定义统计规则);
  6. 表格图文、序列号、列标题格式化;
  7. 表格各组成背景、文字、网格、padding等配置;
  8. 表格批注;
  9. 表格内容、列标题点击事件;
  10. 缩放模式和滚动模式;
  11. 注解模式;
  12. 内容多行显示;
  13. 分页模式;
  14. 首尾动态添加数据;
  15. 丰富的格式化;
  16. 支持二维数组展示(用于类似日程表,电影选票等);
  17. 导入excel(支持颜色,字体,背景,批注,对齐,图片等基本Excel属性);
  18. 表格合并单元(支持注解合并,支持自动合并);
  19. 支持其他刷新框架SmartRefreshLayout;
  20. 可配置表格最小宽度(小于该宽度自动适配);
  21. 支持直接List或数组字段转列;
  22. 支持Json数据直接转换成表格;
  23. 支持表格网格指定行列显示;
  24. 支持自动生成表单。

2.如何引入

allprojects {
        repositories {
            ...
            maven { url 'https://www.jitpack.io' }
        }
    }

 dependencies {
            compile 'com.github.huangyanbin:SmartTable:2.2.0'
    }

3.使用

3.1.布局

        在布局文件中直接插入控件,如下:

      <com.bin.david.form.core.SmartTableandroid:id="@+id/tb"android:layout_width="match_parent"android:layout_height="match_parent"app:layout_constraintBottom_toBottomOf="parent"android:layout_marginTop="@dimen/popup_title_height"android:layout_marginBottom="@dimen/dp68"app:layout_constraintBottom_toTopOf="@+id/llytBtns"app:layout_constraintTop_toBottomOf="@+id/lytTitle"/>

        在SmartTable中数据的构建分为两种,一种是通过注解模式直接构建,方便快捷;一种是通过自己代码构建,这中扩展性更强。 

3.1.通过注解模式构建数据

        注解模式是通过在需要生成表格的类增加注记,然后通过这个类的集合去填充表格的方式。

3.1.1.@SmartTable

        @SmartTable是表格注解,用于添加到类上面。它包含了四个参数。

注解作用
name表格名
count是否显示统计行
pageSize页数量
currentPage当前页

3.1.2.@SmartColumn

        @SmartColumn是列注解,用于添加到类的属性上面。它包含了多个参数。

注解作用
name列标题
id列排序位置(越小越在前面)
parent父列名称(不设置则没有父列)
align设置该列对齐方式,默认居中
type设置是否查询下一级。有ColumnType.Own,ColumnType.Child,两个值可以设置,假设UserInfo 有个属性是Family family对象,你想解析faily对象的属性monther,father两个属性,则需要设置Child,并在monther,father下添加相对应的注解@SmartColumn,否则只解析到Family,默认是Own。
autoMerge设置是否自动合并。假设你返回的数据格式化之后该列附近数据有相同,则会自动合并成一个单元格,默认不开启合并。
maxMergeCount合并最大数量
autoCount是否开启统计。 table 开启显示统计行,设置autoCount为true,则该列可以自动统计,默认为false。
fixed是否固定该列。 fixed设置为true,该列滚动到最左边时,可以自动固定住。

3.1.3.示例 


@SmartTable(count = true)
public class WorkloadStatisticItemDto {public LocalDateTime Date;public LocalDateTime getDate(){return Date;}@SmartColumn(name = "日期",id = 1 )public String DataStr;@SmartColumn(name = "数量(个)",id = 2,autoCount = true )public int PointCount=0;@SmartColumn(name = "长度(米)",id = 3,autoCount = true )public Double LineLength=0d;}

        上方是一个注解类,包含三列:日期、管点数(个)、管线长(米),然后通过如下的方式将这个注解类的集合赋予表格控件即可实现展示。

    List<WorkloadStatisticItemDto> dtos = items.values().stream().sorted(Comparator.comparing(WorkloadStatisticItemDto::getDate)).collect(Collectors.toList());binding.tb.setData(dtos);
展示效果

3.2.通过代码组装数据

        代码组装数据的时候需要的创建两个类别的东西,一个就是数据Dto集合,也就是要展示的数据,另外一个就是表格的列集合。

3.2.1.列(Column)

        通过查看源码,Column有多个构造函数,

    /**列构造方法* 用于构造组合列* @param columnName 列名* @param children 子列*/public Column(String columnName, List<Column> children) {this.columnName = columnName;this.children = children;isParent = true;}/**列构造方法* 用于构造组合列* @param columnName 列名* @param children 子列*/public Column(String columnName, Column... children) {this(columnName, Arrays.asList(children));}/**列构造方法* 用于构造子列* @param columnName 列名* @param fieldName 需要解析的反射字段*/public Column(String columnName, String fieldName) {this(columnName, fieldName, null, null);}/**列构造方法* 用于构造子列* @param columnName 列名* @param fieldName 需要解析的反射字段* @param format 文字格式化*/public Column(String columnName, String fieldName, IFormat<T> format) {this(columnName, fieldName, format, null);}/**列构造方法* 用于构造子列* @param columnName 列名* @param fieldName 需要解析的反射字段* @param drawFormat 绘制格式化*/public Column(String columnName, String fieldName, IDrawFormat<T> drawFormat) {this(columnName, fieldName, null, drawFormat);}/**列构造方法* 用于构造子列* @param columnName 列名* @param fieldName 需要解析的反射字段* @param format 文字格式化* @param drawFormat 绘制格式化*/public Column(String columnName, String fieldName, IFormat<T> format, IDrawFormat<T> drawFormat) {this.columnName = columnName;this.format = format;this.fieldName = fieldName;this.drawFormat =drawFormat;datas = new ArrayList<>();}

        通过构造创建列,并设置其基础属性

        Column<String> typeNameCol = new Column<>("大类", "TypeName");typeNameCol.setFixed(true);typeNameCol.setAutoMerge(true);Column<String> categoryCol = new Column<>("管类", "CategoryName");categoryCol.setFixed(true);Column<String> defaultColorCol = new Column<>("颜色", "DefailtColorStr");

        

3.2.2.表数据(TableData)

       创建数据,绑定数据。

 var tbData = new TableData<>("管类", dtos, typeNameCol, categoryCol, codeCol, enableCol, nextSurveyIndexCol, defaultColorCol, showDirectionCol, canReverseCol,isDrainageCol);binding.tbCategorys.setTableData(tbData);

3.2.3.示例

效果示例

4.总结

        SmartTable的表格数据分为两种方式创建:注解、代码组装。

        若是简单的需求,例如表格基础呈现这种需求,使用注解是代码量最少、最方便的方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低功耗、低成本 NAS 的可能性

使用现状&#xff1a;多台工作电脑&#xff0c;家里人手一台&#xff0c;还在两个住处 有好几台工作电脑&#xff0c;不同电脑有不同的用途&#xff0c;最大的问题就是各个电脑上文件的同步问题&#xff0c;这里当然就需要局域网里的公共文件夹&#xff0c;在NAS的问题上查了网…

【Canvas与艺术】模拟八一电影制片厂电影片头效果

【缘起】 八一厂每部电影前都有其专有开头&#xff0c;如&#xff1a;https://www.ixigua.com/6799821997258834440?logTag2eacce76401e13f9efe7 这个片头可以用canvas模拟下来。 【关键点】 线型放射状粒子系统的运作。 立体感五角星的绘制。 【图例】 【代码】 <!D…

单页面应用部署到iis上可以正常打开,刷新就404

当您遇到Dumi打包的网站部署到IIS上可以正常打开首页,但刷新页面时出现404错误的情况,这通常与以下几个方面有关: 路由处理: Dumi生成的项目通常基于SPA(Single Page Application)架构,使用前端路由来实现无刷新导航。这意味着大部分页面切换是在浏览器层面完成的,而不…

unity学习(73)——服务器异常--无法处理 123类型的数据包

服务器发送回的数据包&#xff0c;客户端根本读不出来&#xff0c;type都读不出来&#xff0c;拖了三天&#xff0c;把客户端翻了个底朝天&#xff0c;发现客户端一点问题都没有&#xff01; 所有的问题不是unity的模型问题&#xff0c;就是socket网络通信中断&#xff01; 1…

C++ 控制语句(一)

一 顺序结构 程序的基本结构有三种&#xff1a; 顺序结构、分支结构、循环结构 大量的实际问题需要通过各种控制流程来解决。 1.1 顺序结构 1.2 简单语句和复合语句 二 循环 2.1 for循环 语句流程图 注意&#xff1a;使用for语句的灵活性 三 while语句 四 do while语句

【项目技术介绍篇】如何在本地运行若依项目

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

程序员也写歌啦

我的第一首AI原创歌曲《旅途的歌声》 身为 AI 重度患者的我&#xff0c;时刻关注着每天发布的各种 AI 产品。面对这些雨后春笋般的 AI 产品&#xff0c;我也早就没那么敏感了。 但是今天尝试着用 AI 生成了一个音乐&#xff0c;真的震惊到了我&#xff01; 不到一分钟&#…

网络瞎复习

七层 应用进程 粘包问题以及如何理解是 TCP 面向字节流协议&#xff1f; 之所以会说 TCP 是面向字节流的协议&#xff0c;UDP 是面向报文的协议&#xff0c;是因为操作系统对 TCP 和 UDP 协议的发送方的机制不同&#xff0c;也就是问题原因在发送方。 先来说说为什么 UDP 是面…

【LaTeX】7实现章节跳转

使用 LaTeX 实现章节跳转 写在最前面1. 引入 hyperref 包2. 标记章节3. 引用章节示例代码注意 小技巧总结 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;…

C语言例4-15:从键盘输入一个整数,求其绝对值并输出。

代码如下&#xff1a; //从键盘输入一个整数&#xff0c;求其绝对值并输出。 #include<stdio.h> int main(void) {int n;printf("输出一个整数&#xff1a; \n");scanf("%d",&n); //从键盘输入一个整数保存至变量nif(n<0) //…

使用LangChain LCEL生成RAG应用、使用LangChain TruLens对抗RAG幻觉

# 导入LangChain的库 from langchain import *# 加载数据源 loader WebBaseLoader() doc loader.load("https://xxx.html")# 分割文档对象 splitter RecursiveCharacterTextSplitter(max_length512) docs splitter.split(doc)# 转换文档对象为嵌入&#xff0c;并…

程序员35岁的职业困惑及应对之道

35岁,对许多程序员来说,是一个职业生涯的重要分水岭。在这个年龄,一些人开始感到迷茫和焦虑,担心自己的技能已经落后,难以跟上日新月异的技术变革。而另一些人则充满信心,认为多年来积累的丰富经验和扎实的技术功底,将助力他们在未来的职业道路上取得新的飞跃。 无疑,在AI、自…

一款比 K8S 更好用的编排工具——Nomod 单机部署

上下文 最近公司需要调研类似 EMCHub 这样支持算力共享的服务。第一直觉是使用 K8S 或 K3S&#xff0c;作为 CNCF 孵化的顶级项目&#xff0c;同时也是当前云原生生态使用最广的编排系统。但是在学习 EMC Hub 源码过程中&#xff0c;偶然发现它是基于 Nomad 做的集群管理。 相…

鸿蒙HarmonyOS应用开发之使用NAPI接口在主线程中进行模块加载

场景介绍 Node-API中的napi_load_module接口的功能是在主线程中进行模块的加载&#xff0c;当模块加载出来之后&#xff0c;可以使用函数napi_get_property获取模块导出的变量&#xff0c;也可以使用napi_get_named_property获取模块导出的函数&#xff0c;目前支持以下场景&a…

vue3从精通到入门2:虚拟DOM的生成与真实DOM的转化

虚拟 DOM 实现是 Vue 框架的核心部分之一&#xff0c;它负责在真实 DOM 之上抽象出一个轻量级的、可复用的 JavaScript 对象树&#xff0c;用于高效地更新视图。 什么是虚拟DOM? 虚拟 DOM 是一个编程概念&#xff0c;它将真实的 DOM 树抽象为一个轻量级的 JavaScript 对象树…

2024年学鸿蒙开发有“钱”途吗?

随着科技的不断发展和智能设备的普及&#xff0c;鸿蒙系统作为华为自主研发的操作系统&#xff0c;正逐渐受到市场的关注。2024年&#xff0c;学鸿蒙开发是否有前途&#xff0c;成为了很多开发者关心的问题。本文将从多个角度分析鸿蒙系统的发展前景&#xff0c;以及学习鸿蒙开…

Qt源程序编译及错误问题解决

Error 5 while parsing C:/qt-everywhere-src-6.6.2/qt-build/qtdeclarative/src/qmlmodels/meta_types/qt6qmlmodels_release_metatypes.json: illegal value .json 文件为空文件0字节&#xff0c;加 “[]”&#xff0c;不要引号。可以解决这类错误。 Qt编译 Qt for Windows…

寻找旋转排序数组中的最小值

题目链接 寻找旋转排序数组中的最小值 题目描述 注意点 1 < n < 5000-5000 < nums[i] < 5000nums中的所有整数 互不相同nums原来是一个升序排序的数组&#xff0c;并进行了 1 至 n 次旋转找出并返回数组中的最小元素设计一个时间复杂度为 O(log n) 的算法解决此…

2024年上半年数学建模竞赛一览表(附赠12场竞赛的优秀论文+格式要求)[电工、妈杯、数维、五一等12场]

为了帮助大家更好地备战今年上半年十二场数学建模竞赛&#xff0c;我们为大家收集到了这十二场相关竞赛的优秀论文以及格式要求&#xff0c;具体内容如下所示。 资料获取 在文末 文中资料来源 名称竞赛官方网站天府杯https://www.tfmssy.org.cn/认证杯http://www.tzmcm.cn/i…

AI Agent(LLM Agent)入门解读

1. 什么是AI Agent&#xff1f; AI Agent可以理解为一个智能体&#xff0c;包括感知模块、规划决策模块和行动模块&#xff0c;类似于人类的五官、大脑和肢体。它能帮助人类处理复杂的任务&#xff0c;并能根据环境反馈进行学习和调整。 五官可以理解为感知模块&#xff0c;大…