ListView:
重写ListView并集成ListView然后重写onMeasure方法:
public class ListViewToScroll extends ListView{
public ListViewToScroll(Context context) {
super(context);
}
public ListViewToScroll(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ListViewToScroll(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
GridView同ListView一样:
public class GridViewToScroll extends GridView
{
public GridViewToScroll(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public GridViewToScroll(Context context, AttributeSet attrs) {
super(context, attrs);
}
public GridViewToScroll(Context context) {
super(context);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
需要注意的是ListView和GridView焦点的问题,ListView和GridView会自动获取焦点,假如你在ListView和GridView上边添加View,ScrollView会根据焦点自动滚动到ListView和GridView的头位置作为第一显示,所以需要取消ListView和GridView的焦点,调用
.setFocusable(false);
方法就可以了.
据说这样嵌套会影响ListView和GridView的优化.所以建议简单的列表使用.