Coder Social home page Coder Social logo

huangyanbin / smarttable Goto Github PK

View Code? Open in Web Editor NEW
5.1K 109.0 851.0 62.45 MB

一款android自动生成表格框架---An Android automatically generated table framework

Home Page: https://juejin.im/post/5a5dce7651882573256bd043

Java 100.00%
table android android-library android-table table-lib table-library annotation android-view

smarttable's People

Contributors

huangyanbin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

smarttable's Issues

单个格子背景问题

你好,我想获取某一列数据的最大值最小值并为其设置其背景颜色,要是最大最小值都只有一个还可以,但是一旦同时有很多最大值的时候就不好做了,设置颜色部分如下
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;
}
}
});

发现一个小bug

使用Form类中的静态变量Empty做多个占位的时候,改变一个占位的name,其他占位也会跟着变,所以这个变量应该去掉。

List解析成多个Column

刚看到增加了List的解析,但是是解析到一个Column里面的。很多使用场景是需要将一个List解析成多个Column进行展示,希望添加,非常感谢。

setAutoMerge(true)有的无效呢?

所有的列都设置了.setAutoMerge(true);。列的5、6两行合并了。同一列下面的8、9、10、11行也是相同的内容,为什么没有自动合并呢?好奇怪

请问支持上拉加载吗?

看到有分页,但是似乎没有上拉加载,
还有字体除了大小颜色,还能设置其他属性吗?比如textStyle

最后赞叹一下,非常强大的控件。

数组越界问题java.lang.ArrayIndexOutOfBoundsException: length=6; index=6

异常:
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);

表格数据多次更新后有一定几率会报错闪退

screenshot_2018-03-07-18-58-13-712_com miui bugre
screenshot_2018-03-07-19-03-29-188_com miui bugre

以上是两次错误报告

在多次频繁的更新表格内不同的数据后会出现这样的问题
使用的是普通的模式设置TableData,正常情况下数据都可以成功显示,切换数据次数多了就出错了

1.8.9,1.9.0都存在这个问题
望尽快修复

table没有设置listener,用手指快速点击table有几率发生以下错误,应该是多点触控没有捕获异常吧,

控件初始化:
`

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)

setContentStyle会报空指针异常

代码如下:
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

怎么单独设置Column的背景

需求是根据值设置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);
            }
        }
    });`

内容换行

您好,我需求是在内容里面,固定宽度,然后内容会自动换行,今天改了点代码,但是文字并不居中,不知道需要有哪些类需要改动?

一个小问题

在竖向滑动表格的时候能不能禁止 表格的横向滑动,在横向滑动的时候禁止表格的竖向滑动。这样在滑动的时候表格就不会抖动了。算是一个小优化QAQ

老铁

请问如何设置默认的上拉加载,下拉刷新样式,或者你提供了几种样式?求指教

1.8.3版本下载不下来

你好,更新版本到1.8.3发现gradle没有下载成功。
缓存中的smarttable-1.8.3.aar文件为1kb,并且没有下载到对应的pom文件。
使用旧版本号(比如1.6.3)就是正常的。

疑问

请问是否支持 ViewPager+Fragment

一点小建议

非常感谢作者将这个库开源出来,功能十分强大,只是在横向滑动表格时会 触发 上下滑动,这个体验可以改进一下就更好了。

after refresh data, the UI of table reduce a row

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.

dialogfragment 中使用异常

## dialog dismiss的时候报错

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中也有同样的问题!

ArrayTableData.create() BUG反馈

/**
 * 创建二维数组表格数据
 * 如果数据不是数组[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);
    }

循环体里按行取数据,然后在表格里作为一列的数据使用,这就对数据做了行列交换处理。

导入excel

  1. 导入excel(支持颜色,字体,背景,批注,对齐,图片等基本Excel属性)
    这个功能在哪,没找到呀

小问题

当放大之后,固定列的setFixedYSequence方法不生效了,而且无法滑动到最顶部和最左边了

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.