最近做需求需要用到gridview。发现这算得上是官方控件里比较不人性的一个了。为什么这么说呢,它的高度和它内部item的高度设置都不尽如人意。
Gridview控件整体的高度
我们知道gridview里边设置item,还可以设置列数。然后item个数超过列数就会折行,这样就显示成类似表格的样式。
写布局的时候没多想,直接把高度设置成了“wrap_content”。然后写adapter,传数据。运行。可是运行出来发现之显示了一行,第二行以后的item被无情的盖住了。
那么改成“match_parent”,依然不行。除非设成固定高度。
这怎么能忍。可是设置成固定高度又不现实,数据是动态的。
于是首先想到的方法自然是获取item个数,然后计算行数,用行数乘以每行的高度,然后通过layoutParam传给gridview。这自然是一种方案。但是太low了。不喜欢。
我们还是进一步看看GridView的原理,为什么会得出这样一个效果。
直接找到计算高度的onMeasure()方法,由于方法很长,我们直接截取计算高度的部分
@Override
protected void onMeasure(int