相信大家都碰见过scrollview中嵌套Listview等等各种滑动列表,
导致Listview内容展示不全。
或者scrollview和listview滑动事件混乱。今天我就贴出两种解决办法,
使用哪种视情况而定
1.自定义Listview,重写onMeasure方法计算高度
public class MyListView extends ListView {
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
2.手动调用方法计算Listview高度,在setadapter()后调用
/**
* 计算ListView的高度
* @param listView
*/
public static void setListViewHeightBasedOnChildren(ListView listView){
if(listView == null) {
throw new RuntimeException("参数 listView 不能为空!");
}
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
throw new RuntimeException("listView的 Adapter 不能为空!");
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); // listItem应该为LinearLayout
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
// 加上条目间隔的长度
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount())) + CommonUtil.parseDip2px(UIUtils.getApplication(), 36f);
listView.setLayoutParams(params);
}