众所周知,google不建议在滑动view中嵌套滑动view,但我们有些设计师总是那么逗逼,喜欢设计的自以为很有美感的设计图,奈何,路漫漫其修远兮,只能去实现。
大家遇到ScrollView嵌套GridView等,其实原理都是一样,需要先确定内层的view的height然后外层才能绘制,所以很多人比如github上给出的
public class ExpandableHeightGridView extends GridView {
boolean expanded = false;
public ExpandableHeightGridView(Context context) {
super(context);
}
public ExpandableHeightGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ExpandableHeightGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public boolean isExpanded() {
return expanded;
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (isExpanded()) {
int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
public void setExpanded(boolean expanded) {
this.expanded = expanded;
}
}
就是在绘制的时候动态获取高度,重新动态赋值高度,这是能解决的,但是当item的高度不固定的时候,这个方法是失败的,一般做法是让item高度固定,当然这要考虑到屏幕适配的问题。