写点什么

LayoutManager 高端玩家,实现花式表格 (1),安卓面试题高级

用户头像
Android架构
关注
发布于: 2021 年 11 月 05 日

| --- | --- |


| setTitle(boolean isLeftOpen, boolean isTopOpe


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


n) | 左侧或者上侧的悬浮标题是否显示,默认显示 |


| setModeAndValue(int mode, int w, int h) | mode-表格模式、w-具体的宽度\一行容纳的单元格数、h-具体的高度\一列容纳的单元格数 |


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


  • 设置具体的值,那么单元格的宽或者高的值就是具体的

  • 设置一行或者一列可以容纳的单元格数量


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


| Mode 模式 | w 的说明 | h 的说明 |


| --- | --- | --- |


| TableLayoutManager.MODE_A | 父布局一行容纳的单元格数 | 父布局一列容纳的单元格数 |


| TableLayoutManager.MODE_B | 单元格宽度 | 单元格高度 |


| TableLayoutManager.MODE_C | 父布局一行容纳的单元格数 | 单元格高度 |


| TableLayoutManager.MODE_D | 单元格宽度 | 父布局一列容纳的单元格数 |


代码:


// 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<TableCell> mAdapter;


protected void initWidget(View root) {


// 假设在这个方法中初始化


mTable.setAdapter(mAdapter = new TableAdapter<TableCell>(new ArrayList<>()) {


@Override


public int getItemLayout(TableCell tableCell, int pos) {


// ... 返回子视图布局文件


// 支持多类型


return R.layout.table_cell_content_item;


}


@Override


public BaseAdapter.ViewHolder<TableCell> onCreateViewHolder(View root, int itemType) {


// itemType 是子视图布局文件


// 根据布局返回具体的 ViewHolder


return new ContentHolder(root);


}


});


}


// 具体的 ViewHolder


class ContentHolder extends BaseAdapter.ViewHolder<TableCell>{


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_A、Mode_C 和 Mode_D,需要再重新测量:


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

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
LayoutManager高端玩家,实现花式表格(1),安卓面试题高级