今天在优化项目的时候发现需要用到ScrollView同时嵌套ListView和GridView ,普通的写上去发现 ListView和GridView 都无法正常显示 (只显示一行) ,这很忧伤啊 .
在网上找了点资料 ,问题解决了 ,在此记录下来 :
/**
* 自定义GridView 用于ScrollView 嵌套的问题
* 重写GridView,让其失去滑动特性:(重写ListView也是和GridView重写的方法一 样)
*/
public class MyGridView extends GridView {
public MyGridView (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 我没用上面的方法 ,我只设置ListView的高度 写的一个工具类
/**
* 设置ListView高度
*/
public class ListViewUtil {
public static void setListViewHeight(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
// 返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
// 计算子项的高度
listItem.measure(0, 0);
// 统计所有子项的高度
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
}
注意 : 要在
mList.setAdapter(listAdapter);
listAdapter.notifyDataSetChanged(); // 后调用
ListViewUtil.setListViewHeight(mList);
网友评论