028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Android自定义LayoutManager实现花式表格

如果你对RecyclerView原理还不是特别了解,非常建议你读一下。

创新互联服务项目包括德州网站建设、德州网站制作、德州网页制作以及德州网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,德州网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到德州省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

本文的项目也是学习自定义LayoutManager绝佳资料,大家有需要的可以好好拜读。

前言

表格是自打我进公司以后就使用的控件,起初使用的是ScrollablePanel,从一开始的被花式吊打,到后期的熟练使用。

Android 自定义LayoutManager实现花式表格

大佬写的控件确实给我的工作带来了极大的方便,不过还是有些问题存在:

在我深入学习RecyclerView以后,想能不能只用一层RecyclerView,借助LayoutManager实现,写着写着,发现该思路可行,并实现了一款基于一个RecyclerView的表格控件TableView,先看一下效果:

照片墙

Android 自定义LayoutManager实现花式表格

经常看到有同学问类似的首页如何实现,现在不用自定义View也可以轻松实现了哈~

课程表

Android 自定义LayoutManager实现花式表格

表格

Android 自定义LayoutManager实现花式表格

TableView具有如下特点:

Github地址

使用

第一步 | 添加xml文件

<?xml version="1.0" encoding="utf-8"?>

 
 
 

第二步 | 获取TableView

在展示代码之前,了解一下TableView中的主要函数:

Android 自定义LayoutManager实现花式表格

这个setTitle(boolean isLeftOpen, boolean isTopOpen)有什么作用呢?为了确保表格的每一个单元格的长度和宽度都一样(子视图可以在横纵方向上占有多个单元格),宽和高都使用两种方式:

所以宽高各有两种,模式的数量 = 2 * 2,总共有:

Android 自定义LayoutManager实现花式表格

代码:

// if use butterknife
// or use findViewById
@BindView(R.id.tb)
 TableView mTable;
 
// 默认为 TableLayoutManager.MODE_A, 4, 8
mTable.setModeAndValue(TableLayoutManager.MODE_A, 6, 8);

第三步 | 创建数据类

实现ICellItem接口:

public class TableCell implements ICellItem {
 private String name;
 private String value;
 private int type;
 private int row;
 private int col;
 private int widthSpan;
 private int heightSpan;
 //... 省略构造函数和Get Set方法
 @Override
 public int getRow() {
 return row;
 }
 @Override
 public int getCol() {
 return col;
 }
 @Override
 public int getWidthSpan() {
 return widthSpan;
 }
 @Override
 public int getHeightSpan() {
 return heightSpan;
 }
}

第四步 | 设置适配器

private TableAdapter mAdapter;
protected void initWidget(View root) {
 // 假设在这个方法中初始化
 mTable.setAdapter(mAdapter = new TableAdapter(new ArrayList<>()) {
 @Override
 public int getItemLayout(TableCell tableCell, int pos) {
  // ... 返回子视图布局文件
  // 支持多类型
  return R.layout.table_cell_content_item;
 }
 @Override
 public BaseAdapter.ViewHolder onCreateViewHolder(View root, int itemType) {
  // itemType是子视图布局文件
  // 根据布局返回具体的ViewHolder
  return new ContentHolder(root);
 }
 });
}
// 具体的ViewHolder
class ContentHolder extends BaseAdapter.ViewHolder{
 TextView mContent;
 public ContentHolder(View itemView) {
  super(itemView);
  mContent = itemView.findViewById(R.id.tv_name);
 }
 @Override
 protected void onBind(TableCell tableCell) {
  mContent.setText(tableCell.getValue());
 }
 }

第五步 | 重新测绘

如果TableView使用的模式是Mode_AMode_CMode_D,需要再重新测量:

mTable.post(() -> mTable.reMeasure());

总结

总的来说,TableView的核心是TableLayoutManager,也就是RecyclerView中的LayoutManager,类似于可以随时横纵向切换的GridLayoutManager,如果各位同学对TableView感兴趣,我将会在后续的文章深入原理。

最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

以上所述是小编给大家介绍的Android 自定义LayoutManager实现花式表格,希望对大家有所帮助!


网站名称:Android自定义LayoutManager实现花式表格
分享网址:http://www.tsicrk.com/article/pgjjoj.html

其他资讯

让你的专属顾问为你服务

4.4371s