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的问题上查了网…

Openwrt下适配Samba

关于Samba samba是Linux和Unix平台的一款实现了SMB协议的软件&#xff0c;可以使得windows平台的主机也可以访问Linux和Unix平台主机共享出来的资源。 SMB协议(Server Message Block)是由微软开发的一种软件程序级的网络传输协议&#xff0c;基于NetBIOS&#xff0c;主要功用…

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

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

开放大学2024年春《幼儿园环境创设 050546》过程性考核作业二:撰写一所幼儿园活动环境创设现状分析评价报告参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 选择一所幼儿园&#xff0c;最好是你所在或者比较熟悉的园所&am…

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

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

vc_red.msi 错误

建议将安装的软件解压&#xff0c;再安装&#xff0c;这样可以自动下载vc_red.msi. 不解压就会出现这个错误。

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语句

java springboot mybatisplus vue elementui python django vue 30套源代码 可用于接私活或毕设

java springboot vue elementui python django vue 30套源代码 Springboot vue3 elementplus 后台通用权限系统 代码生成器 (源码教程开发环境) Springboot vue2 elementui 后台通用权限系统 代码生成器(源码教程开发环境) Springboot vue2 elementui 物品出入库管理系统 (源…

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

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

程序员也写歌啦

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

Java中的序列化

Java中的序列化&#xff08;Serialization&#xff09;是一个将对象转换为字节序列的过程&#xff0c;以便可以在网络上传输或将其写入持久存储&#xff0c;如文件。这样&#xff0c;可以稍后在需要时重新构造这个对象&#xff0c;即反序列化&#xff08;Deserialization&#…

网络瞎复习

七层 应用进程 粘包问题以及如何理解是 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;…

前端理论总结(js)——闭包和内存泄漏

闭包 什么是闭包&#xff1f; 函数内部和函数外部连接起来的桥梁&#xff0c;可以在一个内层函数中访问到其外层函数的作用域 为什么要用 封装变量 收敛权限 临时变量持久化 优点 1.保护函数内的变量安全      2.在内存中维持一个变量(用的太多就变成了缺点&#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…