ScrollView嵌套ListView或者是GridView的结构,Google公司不建议一起使用,但是看看下面这个设计(其中分类上面还有广告位,整个页面能够上下滑动):
如果用layout来做,这是需要写12个button,但是如果以后这些类别需要从api获取再显示的话,用layout的方法明显不够灵活 ,因此就会想到用Gridview来实现。
但是由于Gridview或者Listview在ScrollView里面,高度都是显示不完整的,那么需要怎么解决?
前面一篇文章提到可以单独计算ListView的高度,但是这个有点不好的地方就是ListView的item只能用LinearLayout,这个可以返回阅读。
那么现在介绍另外一个方法:自定义可适应ScrollView的ListView或者Gridview,以Gridview为例
public class GridViewForScrollView extends GridView{ public GridViewForScrollView(Context context) { super(context); } public GridViewForScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public GridViewForScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); }}
其中重点就是在onMeasure方法
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
接下来直接用GridViewForScrollView即可