自定義表格,可鎖定雙向表頭,自適應列寬,自適應行高,下拉刷新,上拉加載,鏈式調用
java
Github-LockTableView
歡迎你們點贊(Star),你的鼓勵是我前行的動力!個人宗旨:簡單!實用!git
//在工程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' } 複製代碼
final LockTableView mLockTableView = new LockTableView(this, mContentView, mTableDatas); Log.e("表格加載開始", "當前線程:" + Thread.currentThread()); mLockTableView.setLockFristColumn(true) //是否鎖定第一列 .setLockFristRow(true) //是否鎖定第一行 .setMaxColumnWidth(100) //列最大寬度 .setMinColumnWidth(60) //列最小寬度 .setMinRowHeight(20)//行最小高度 .setMaxRowHeight(60)//行最大高度 .setTextViewSize(16) //單元格字體大小 .setCellPadding(15)//設置單元格內邊距(dp) .setColumnWidth(1,60) //設置指定列文本寬度(從0開始計算,寬度單位dp) .setFristRowBackGroudColor(R.color.table_head)//表頭背景色 .setTableHeadTextColor(R.color.beijin)//表頭字體顏色 .setTableContentTextColor(R.color.border_color)//單元格字體顏色 .setNullableString("N/A") //空值替換值 .setTableViewListener(new LockTableView.OnTableViewListener() { //設置橫向滾動監聽 @Override public void onTableViewScrollChange(int x, int y) { Log.e("滾動值","["+x+"]"+"["+y+"]"); } }) .setTableViewRangeListener(new LockTableView.OnTableViewRangeListener() { //設置橫向滾動邊界監聽 @Override public void onLeft(HorizontalScrollView view) { Log.e("滾動邊界","滾動到最左邊"); } @Override public void onRight(HorizontalScrollView view) { Log.e("滾動邊界","滾動到最右邊"); } }) .setOnLoadingListener(new LockTableView.OnLoadingListener() { //下拉刷新、上拉加載監聽 @Override public void onRefresh(final XRecyclerView mXRecyclerView, final ArrayList<ArrayList<String>> mTableDatas) { Log.e("表格主視圖",mXRecyclerView); Log.e("表格全部數據",mTableDatas); //如需更新表格數據調用,部分刷新不會所有重繪 mLockTableView.setTableDatas(mTableDatas); //中止刷新 mXRecyclerView.refreshComplete(); } @Override public void onLoadMore(final XRecyclerView mXRecyclerView, final ArrayList<ArrayList<String>> mTableDatas) { Log.e("表格主視圖",mXRecyclerView); Log.e("表格全部數據",mTableDatas); //如需更新表格數據調用,部分刷新不會所有重繪 mLockTableView.setTableDatas(mTableDatas); //中止刷新 mXRecyclerView.loadMoreComplete(); //若是沒有更多數據調用 mXRecyclerView.setNoMore(true); } }) .setOnItemClickListenter(new LockTableView.OnItemClickListenter() { @Override public void onItemClick(View item, int position) { Log.e("點擊事件",position+""); } }) .setOnItemLongClickListenter(new LockTableView.OnItemLongClickListenter() { @Override public void onItemLongClick(View item, int position) { 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 表格數據 */ public LockTableView(Context mContext, ViewGroup mContentView, ArrayList<ArrayList<String>> mTableDatas) { this.mContext = mContext; this.mContentView = mContentView; this.mTableDatas = mTableDatas; initAttrs(); } 複製代碼
/** * 是否鎖定首行 */ private boolean isLockFristRow = true; /** * 是否鎖定首列 */ private boolean isLockFristColumn = true; /** * 最大列寬(dp) */ private int maxColumnWidth; /** * 最小列寬(dp) */ private int minColumnWidth; /** * 最大行高(dp) */ private int maxRowHeight; /** * 最小行高dp) */ private int minRowHeight; /** * 第一行背景顏色 */ private int mFristRowBackGroudColor; /** * 數據爲空時的缺省值 */ private String mNullableString; /** * 單元格字體大小 */ private int mTextViewSize; /** * 表格頭部字體顏色 */ private int mTableHeadTextColor; /** * 表格內容字體顏色 */ private int mTableContentTextColor; /** * 表格橫向滾動監聽事件 */ private OnTableViewListener mTableViewListener; /** * 表格橫向滾動到邊界監聽事件 */ private OnTableViewRangeListener mTableViewRangeListener; /** * 表格上拉刷新、下拉加載監聽事件 */ private OnLoadingListener mOnLoadingListener; /** * Item點擊事件 */ private OnItemClickListenter mOnItemClickListenter; /** * Item長按事件 */ private OnItemLongClickListenter mOnItemLongClickListenter; /** * Item選中顏色 */ private int mOnItemSeletor; /** * 單元格內邊距 */ private int mCellPadding; 複製代碼
掘金:juejin.cn/user/178526…github
簡書:www.jianshu.com/u/7566e4604…微信
GitHub:github.com/RmondJonemarkdown
Copyright (c) 2018 Guohanlin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 複製代碼