Excel是日常工作中人人都会用到的数据报表工具,它的方便快捷自然不用我们多说。
现在来谈谈怎么用android来开发类似的报表。
现在大多数用的都是 HorizontalScrollView + ScrollView + ListView的方式,这种方式确实简单方便,容易上手,我们来看下(这种上手快,简单的报表可以满足,但是复杂的报表,比如有连线,图形的就走不通了):
1、ListView需要继承覆盖下其中一个方法 onMeasure:
public class NoscrollListView extends ListView {
//...此处省略
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//maxSpec 表示最大高度,完全铺满父view,即ScrollView
int maxSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, maxSpec);
}
}
如上面的注释所示,maxSpec的定义,就是让ListView与它的父View一样高。
2、再来看下HorizontalScrollView 的定义:
/**
* 实现两个HorizontalScrollView 同步滚动
*/
public class SyncHorizontalScrollView extends HorizontalScrollView {
private View otherScroolView;
//...
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (otherScroolView != null) {
otherScroolView.scrollTo(l, t);
}
}
public void setScrollView(View view) {
otherScroolView = view;
}
}
otherScroolView 就是随它同步滚动的HorizontalScrollView。在滚动监听方法onScrollChanged方法中,otherScroolView 会同步一直滚动同样的距离。
3、最后看下最终的layout文件与activity代码:
layout文件示意图如下:
a、头部与数据显示可以左右滚动,所以都是 SyncHorizontalScrollView,这两个ScrollView中的列必须要保持宽度对齐。
b、左边固定栏与数据显示可以上下滚动,所以都是 NoscrollListView,同样这两个ListView的行要保持高度对齐。
c、 数据显示用SyncHorizontalScrollView嵌套NoscrollListView,就可以了。
d、左边固定栏与数据显示区是在同一个 ScrollView中,这个ScrollView可以保证这2个部分上下滚动一致,因为它们的高度与ScrollView的高度是同样大小的(注意看上面maxSpec的定义)
这样一来,上下左右滚动时,都能保持同步一致了。
so easy!喜欢的朋友可以关注下我,谢谢啦~~