系统提供的ListView嵌套在ScrollView中会出现无法正确计算ListView的高度,导致ListView中item显示不全,解决这个问题的方法很简单,重写一下ListView的onMeasure方法即可:
public class ListViewInScrollView extends ListView {
public ListViewInScrollView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int mExpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, mExpandSpec);
}
}
如果需要listview执行滑动操作,为了防止与ScrollView,在以上代码后添加
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()&MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_DOWN:
//记录手指按下时的位置
mPosition = pointToPosition((int)ev.getX(),(int)ev.getY());
return super.dispatchTouchEvent(ev);
case MotionEvent.ACTION_MOVE:
return true;
case MotionEvent.ACTION_UP:
if (pointToPosition((int)ev.getX(),(int)ev.getY()) == mPosition){
return super.dispatchTouchEvent(ev);
} else {
//如果手指已经移出按下时的Item,说明是滚动行为,清理Item pressed状态
setPressed(false);
invalidate();
return true;
}
}
return super.dispatchTouchEvent(ev);
}
使用重写后的ListView即可解决问题。