自定义表格,可锁定双向表头,自适应列宽,自适应行高,下拉刷新,上拉加载,快速集成
- 第一步
//在工程gradle文件里allprojects {
repositories {
.......
maven { url'https://jitpack.io' }
......
}
}//如果不在工程gradle文件里加入,也可以加入模块gradle文件中repositories {
maven {
url"https://jitpack.io"
}
}- 第二步
dependencies {
compile'com.github.RmondJone:LockTableView:1.1.2'
}finalLockTableViewmLockTableView = newLockTableView(this, mContentView, mTableDatas);
Log.e("表格加载开始", "当前线程:" + Thread.currentThread());
mLockTableView.setLockFristColumn(true) //是否锁定第一列
.setLockFristRow(true) //是否锁定第一行
.setMaxColumnWidth(100) //列最大宽度
.setMinColumnWidth(60) //列最小宽度
.setColumnWidth(1,60) //设置指定列文本宽度(从0开始计算,宽度单位dp)
.setMinRowHeight(20)//行最小高度
.setMaxRowHeight(60)//行最大高度
.setTextViewSize(16) //单元格字体大小
.setCellPadding(15)//设置单元格内边距(dp)
.setFristRowBackGroudColor(R.color.table_head)//表头背景色
.setTableHeadTextColor(R.color.beijin)//表头字体颜色
.setTableContentTextColor(R.color.border_color)//单元格字体颜色
.setNullableString("N/A") //空值替换值
.setTableViewListener(newLockTableView.OnTableViewListener() {
//设置横向滚动监听@OverridepublicvoidonTableViewScrollChange(intx, inty) {
Log.e("滚动值","["+x+"]"+"["+y+"]");
}
})
.setTableViewRangeListener(newLockTableView.OnTableViewRangeListener() {
//设置横向滚动边界监听@OverridepublicvoidonLeft(HorizontalScrollViewview) {
Log.e("滚动边界","滚动到最左边");
}
@OverridepublicvoidonRight(HorizontalScrollViewview) {
Log.e("滚动边界","滚动到最右边");
}
})
.setOnLoadingListener(newLockTableView.OnLoadingListener() {
//下拉刷新、上拉加载监听@OverridepublicvoidonRefresh(finalXRecyclerViewmXRecyclerView, finalArrayList<ArrayList<String>> mTableDatas) {
Log.e("表格主视图",mXRecyclerView);
Log.e("表格所有数据",mTableDatas);
//如需更新表格数据调用,部分刷新不会全部重绘mLockTableView.setTableDatas(mTableDatas);
//停止刷新mXRecyclerView.refreshComplete();
}
@OverridepublicvoidonLoadMore(finalXRecyclerViewmXRecyclerView, finalArrayList<ArrayList<String>> mTableDatas) {
Log.e("表格主视图",mXRecyclerView);
Log.e("表格所有数据",mTableDatas);
//如需更新表格数据调用,部分刷新不会全部重绘mLockTableView.setTableDatas(mTableDatas);
//停止刷新mXRecyclerView.loadMoreComplete();
//如果没有更多数据调用mXRecyclerView.setNoMore(true);
}
})
.setOnItemClickListenter(newLockTableView.OnItemClickListenter() {
@OverridepublicvoidonItemClick(Viewitem, intposition) {
Log.e("点击事件",position+"");
}
})
.setOnItemLongClickListenter(newLockTableView.OnItemLongClickListenter() {
@OverridepublicvoidonItemLongClick(Viewitem, intposition) {
Log.e("长按事件",position+"");
}
})
.setOnItemSeletor(R.color.dashline_color)//设置Item被选中颜色
.show(); //显示表格,此方法必须调用mLockTableView.getTableScrollView().setPullRefreshEnabled(true);
mLockTableView.getTableScrollView().setLoadingMoreEnabled(true);
mLockTableView.getTableScrollView().setRefreshProgressStyle(ProgressStyle.SquareSpin);
//属性值获取Log.e("每列最大宽度(dp)", mLockTableView.getColumnMaxWidths().toString());
Log.e("每行最大高度(dp)", mLockTableView.getRowMaxHeights().toString());
Log.e("表格所有的滚动视图", mLockTableView.getScrollViews().toString());
Log.e("表格头部固定视图(锁列)", mLockTableView.getLockHeadView().toString());
Log.e("表格头部固定视图(不锁列)", mLockTableView.getUnLockHeadView().toString());
/** * 构造方法 * * @param mContext 上下文 * @param mContentView 表格父视图 * @param mTableDatas 表格数据 */publicLockTableView(ContextmContext, ViewGroupmContentView, ArrayList<ArrayList<String>> mTableDatas) {
this.mContext = mContext;
this.mContentView = mContentView;
this.mTableDatas = mTableDatas;
initAttrs();
}/** * 是否锁定首行 */privatebooleanisLockFristRow = true;
/** * 是否锁定首列 */privatebooleanisLockFristColumn = true;
/** * 最大列宽(dp) */privateintmaxColumnWidth;
/** * 最小列宽(dp) */privateintminColumnWidth;
/** * 最大行高(dp) */privateintmaxRowHeight;
/** * 最小行高dp) */privateintminRowHeight;
/** * 第一行背景颜色 */privateintmFristRowBackGroudColor;
/** * 数据为空时的缺省值 */privateStringmNullableString;
/** * 单元格字体大小 */privateintmTextViewSize;
/** * 表格头部字体颜色 */privateintmTableHeadTextColor;
/** * 表格内容字体颜色 */privateintmTableContentTextColor;
/** * 表格横向滚动监听事件 */privateOnTableViewListenermTableViewListener;
/** * 表格横向滚动到边界监听事件 */privateOnTableViewRangeListenermTableViewRangeListener;
/** * 表格上拉刷新、下拉加载监听事件 */privateOnLoadingListenermOnLoadingListener;
/** * Item点击事件 */privateOnItemClickListentermOnItemClickListenter;
/** * Item长按事件 */privateOnItemLongClickListentermOnItemLongClickListenter;
/** * Item选中颜色 */privateintmOnItemSeletor;
/** * 单元格内边距 */privateintmCellPadding;
- 技术交流群:QQ(264587303)
- Demo作者:郭翰林
- 注:有定制化需求自己下源码根据自己的需求改动,不要指望别人给你实现,这样永远没有成长!
- 本控件实现没有难度,只要静心看代码都能看的懂。我只提供最基础的功能,尽量满足大部分的开发需求。
- 此项目由于个人原因,已停止维护!望大家见谅!希望有更多热心人士可以Fork此项目进行改造升级!
Copyright (c) 2018GuohanlinPermissionisherebygranted, freeofcharge, toanypersonobtainingacopyofthissoftwareandassociateddocumentationfiles (the"Software"), todealintheSoftwarewithoutrestriction, includingwithoutlimitationtherightstouse, copy, modify, merge, publish, distribute, sublicense, and/orsellcopiesoftheSoftware, andtopermitpersonstowhomtheSoftwareisfurnishedtodoso, subjecttothefollowingconditions:
TheabovecopyrightnoticeandthispermissionnoticeshallbeincludedinallcopiesorsubstantialportionsoftheSoftware.
THESOFTWAREISPROVIDED"AS IS", WITHOUTWARRANTYOFANYKIND, EXPRESSORIMPLIED, INCLUDINGBUTNOTLIMITEDTOTHEWARRANTIESOFMERCHANTABILITY,
FITNESSFORAPARTICULARPURPOSEANDNONINFRINGEMENT. INNOEVENTSHALLTHEAUTHORSORCOPYRIGHTHOLDERSBELIABLEFORANYCLAIM, DAMAGESOROTHERLIABILITY, WHETHERINANACTIONOFCONTRACT, TORTOROTHERWISE, ARISINGFROM,
OUTOFORINCONNECTIONWITHTHESOFTWAREORTHEUSEOROTHERDEALINGSINTHESOFTWARE.