huangyanbin / smarttable Goto Github PK
View Code? Open in Web Editor NEW一款android自动生成表格框架---An Android automatically generated table framework
Home Page: https://juejin.im/post/5a5dce7651882573256bd043
一款android自动生成表格框架---An Android automatically generated table framework
Home Page: https://juejin.im/post/5a5dce7651882573256bd043
请问,如何设置列的宽度
请问这是什么问题呢
这一点有点疑问
RT,我试过覆写IDrawFormat$measureWidth,但是不行.
你好,我想获取某一列数据的最大值最小值并为其设置其背景颜色,要是最大最小值都只有一个还可以,但是一旦同时有很多最大值的时候就不好做了,设置颜色部分如下
table.getConfig().setContentBackgroundFormat(new BaseCellBackgroundFormat() {
@OverRide
public int getBackGroundColor(CellInfo cellInfo) {
if ("voltage".equals(cellInfo.column.getFieldName()) && ((cellInfo.position == maxV))) {
return ContextCompat.getColor(MainActivity.this, R.color.selectColor);
} else if ("voltage".equals(cellInfo.column.getFieldName())&& ((cellInfo.position == minV))) {
return ContextCompat.getColor(MainActivity.this, R.color.column_bg);
} else {
return TableConfig.INVALID_COLOR;
}
}
});
使用Form类中的静态变量Empty做多个占位的时候,改变一个占位的name,其他占位也会跟着变,所以这个变量应该去掉。
刚看到增加了List的解析,但是是解析到一个Column里面的。很多使用场景是需要将一个List解析成多个Column进行展示,希望添加,非常感谢。
所有的列都设置了.setAutoMerge(true);。列的5、6两行合并了。同一列下面的8、9、10、11行也是相同的内容,为什么没有自动合并呢?好奇怪
看到有分页,但是似乎没有上拉加载,
还有字体除了大小颜色,还能设置其他属性吗?比如textStyle
最后赞叹一下,非常强大的控件。
怎么隐藏每列表头的A、B、C、。。。。。。
异常:
05-03 11:02:05.825 8429-8429/com.table.scrollablepanel E/AndroidRuntime: FATAL EXCEPTION: main Process: com.table.scrollablepanel, PID: 8429 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.table.scrollablepanel/com.table.scrollablepanel.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=6; index=6 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2534) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2608) at android.app.ActivityThread.access$800(ActivityThread.java:178) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5637) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754) Caused by: java.lang.ArrayIndexOutOfBoundsException: length=6; index=6 at com.bin.david.form.data.table.FormTableData.create(FormTableData.java:40) at com.table.scrollablepanel.MainActivity.onCreate(MainActivity.java:45) at android.app.Activity.performCreate(Activity.java:6092) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2481) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2608) at android.app.ActivityThread.access$800(ActivityThread.java:178) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5637) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
Activity代码:
Form[][] forms = { { new Form("序号", Paint.Align.CENTER), Form.Empty, new Form("盘点任务单", Paint.Align.CENTER), Form.Empty, new Form("任务名称", Paint.Align.CENTER), Form.Empty, new Form("资产类别", Paint.Align.CENTER), Form.Empty, new Form("是否包含租赁设备", Paint.Align.CENTER), Form.Empty, new Form("创建人", Paint.Align.CENTER) } }; //出现问题的代码: final FormTableData<Form> tableData = FormTableData.create(table, "登记表", 6, forms);
控件初始化:
`
private void initWidget()
{
ICellBackgroundFormat backgroundFormat = new BaseCellBackgroundFormat()
{
@OverRide
public int getBackGroundColor(CellInfo cellInfo)
{
if (cellInfo.row % 2 == 0)
{
return ContextCompat.getColor(mActivity, R.color.windows_bg);
}
return TableConfig.INVALID_COLOR;
}
};
tb_table.setZoom(false, 3, 0.2f); // 大小
tb_table.getConfig().setShowColumnTitle(true)
.setShowXSequence(false).setShowYSequence(false)
.setColumnTitleBackground(new BaseBackgroundFormat(getResources().getColor(R.color.windows_bg)))
.setCountBackground(new BaseBackgroundFormat(getResources().getColor(R.color.colorAccent))) // 总计背景
.setCountBgCellFormat(new ICellBackgroundFormat() // 总结字体颜色
{
@OverRide
public void drawBackground(Canvas canvas, Rect rect, Column column, Paint paint)
{
}
@Override
public int getTextColor(Column column)
{
return ContextCompat.getColor(mActivity, R.color.white);
}
})
.setFixedCountRow(true) // 固定统计行
.setFixedXSequence(true) // 固定顶部
.setFixedTitle(true) // 固定列标题
.setContentCellBackgroundFormat(backgroundFormat) // 背景
.setShowTableTitle(true) // 表名
.setTableTitleStyle(new FontStyle(mActivity, 20, getResources().getColor(R.color.colorPrimary)).setAlign(Paint.Align.CENTER));
}
`
快速点击后报错:
java.lang.IllegalArgumentException: pointerIndex out of range
at android.view.MotionEvent.nativeGetAxisValue(Native Method)
at android.view.MotionEvent.getX(MotionEvent.java:2381)
at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:2092)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2402)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:559)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1870)
at android.app.Activity.dispatchTouchEvent(Activity.java:3236)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:71)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:71)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:521)
at android.view.View.dispatchPointerEvent(View.java:10952)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5121)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4973)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4504)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4557)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4523)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4656)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4531)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4713)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4504)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4557)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4523)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4531)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4504)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7011)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6940)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6901)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7121)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
代码如下:
mTermSmartTable.getConfig() .setColumnTitleStyle(new FontStyle(21, Color.BLACK)) .setContentStyle(new FontStyle(this, 18, Color.BLACK)) .setShowTableTitle(false) .setShowXSequence(false) .setShowYSequence(false) .setTextLeftOffset(5);
FATAL EXCEPTION: Thread-603
java.lang.NullPointerException
at com.bin.david.form.utils.DrawUtils.getTextHeight(DrawUtils.java:22)
at com.bin.david.form.core.TableMeasurer.getTableHeight(TableMeasurer.java:120)
at com.bin.david.form.core.TableMeasurer.measure(TableMeasurer.java:30)
at com.bin.david.form.core.SmartTable$1.run(SmartTable.java:233)
at java.lang.Thread.run(Thread.java:841)
smartTable在交互上体验还是很棒的,也属于列表类型的控件,若有需求在数据很多的情况下,就得考虑分页加载的问题,建议大神可以扩展集成下分页加载 @huangyanbin
请问在scrollerview中使用smartTable的正确姿势是什么?
需求是根据值设置cell的背景,值不为空的cell将其背景设置为红色。代码如下,得到的结果是所有cell都变红色了,并且覆盖了文本值。
`column4.setDrawFormat(new TextDrawFormat() {
@Override
public void drawBackground(Canvas c, CellInfo<String> cellInfo, Rect rect, TableConfig config) {
if (!TextUtils.isEmpty(cellInfo.value)) {
c.drawColor(Color.RED);
}
}
});`
SmartTable是否有行点击事件呀
您好,我需求是在内容里面,固定宽度,然后内容会自动换行,今天改了点代码,但是文字并不居中,不知道需要有哪些类需要改动?
在竖向滑动表格的时候能不能禁止 表格的横向滑动,在横向滑动的时候禁止表格的竖向滑动。这样在滑动的时候表格就不会抖动了。算是一个小优化QAQ
和SwipeRefreshLayout或者SmartRefreshLayout等常用刷新控件存在滑动冲突
.iml文件是不是忘了上传了?
放在viewpager内 viewpager不能右滑了
请问如何设置默认的上拉加载,下拉刷新样式,或者你提供了几种样式?求指教
你好,更新版本到1.8.3发现gradle没有下载成功。
缓存中的smarttable-1.8.3.aar文件为1kb,并且没有下载到对应的pom文件。
使用旧版本号(比如1.6.3)就是正常的。
请问是否将来支持读取excel表格并显示数据
请问是否支持 ViewPager+Fragment
支持EditText编辑框吗? 里面貌似没发现这个功能
如何取消顶部的ABCDE...和左边的1234567....这些序号
因为表格宽度不是很宽,想设置表格默认宽度为屏幕宽度
有什么方法能实现么
非常感谢作者将这个库开源出来,功能十分强大,只是在横向滑动表格时会 触发 上下滑动,这个体验可以改进一下就更好了。
请问如何对MapTableData中的列排序?
我今天试了试,notifychanged的时候发现数组越界了。
I need to change a column's data, when I call column.getDatas().set(position, true); and then call table.invalidate(); the UI of table reduce a row, why? Is it a exception? or I call error functions.
05-16 19:54:36.185 21577-21577/? W/System.err: java.lang.ClassCastException: android.view.ContextThemeWrapper cannot be cast to android.app.Activity
05-16 19:54:36.185 21577-21577/? W/System.err: at com.bin.david.form.core.SmartTable.onDetachedFromWindow(SmartTable.java:591)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.View.dispatchDetachedFromWindow(View.java:13690)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2834)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2834)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2834)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2834)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2834)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewRootImpl.dispatchDetachedFromWindow(ViewRootImpl.java:3192)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewRootImpl.doDie(ViewRootImpl.java:5776)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewRootImpl.die(ViewRootImpl.java:5753)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.WindowManagerGlobal.removeViewLocked(WindowManagerGlobal.java:439)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:394)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:125)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.app.Dialog.dismissDialog(Dialog.java:341)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.app.Dialog.dismiss(Dialog.java:324)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.app.DialogFragment.dismissInternal(DialogFragment.java:278)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.app.DialogFragment.dismiss(DialogFragment.java:258)
网络数据模式下,无网络或者网络请求失败的情况下,报这个错误java.lang.NullPointerException: Attempt to invoke virtual method 'void com.bin.david.form.data.table.TableData.clear()',给的demo中也有同样的问题!
/**
* 创建二维数组表格数据
* 如果数据不是数组[row][col],可以使用transformColumnArray方法转换
* @param tableName 表名
* @param titleNames 列名
* @param data 数据 数组[row][col]
* @param drawFormat 数据格式化
* @return 创建的二维数组表格数据
*/
public static<T> ArrayTableData<T> create(String tableName,String[] titleNames, T[][] data, IDrawFormat<T> drawFormat){
List<Column<T>> columns = new ArrayList<>();
for(int i = 0;i <data.length;i++){
T[] dataArray = data[i];
Column<T> column = new Column<>(titleNames == null?"":titleNames[i], null,drawFormat);
column.setDatas(Arrays.asList(dataArray));
columns.add(column);
}
ArrayList<T> arrayList = new ArrayList<>(Arrays.asList(data[0]));
ArrayTableData<T> tableData = new ArrayTableData<>(tableName,arrayList,columns);
tableData.setData(data);
return tableData;
}
注释写传入的参数二维数组为[row][col],在方法体里的处理却是按照数组[col][row]进行处理。
若二维数组data[m][n],理解为一个m行,n列的二维数组,则data.length等于m,data[i].length等于n,data[i]为i行的一维数组数据,即i行的所有列数据。
for(int i = 0;i <data.length;i++){
T[] dataArray = data[i];
Column<T> column = new Column<>(titleNames == null?"":titleNames[i], null,drawFormat);
column.setDatas(Arrays.asList(dataArray));
columns.add(column);
}
循环体里按行取数据,然后在表格里作为一列的数据使用,这就对数据做了行列交换处理。
有时候表标题不一定需要显示在控件内
当放大之后,固定列的setFixedYSequence方法不生效了,而且无法滑动到最顶部和最左边了
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.