scrollview中嵌套listview,gridview时高度问题

来源:互联网 发布:google算法面试题 编辑:程序博客网 时间:2024/06/01 16:54


网上很多文章都说自订一个list

@Overridepublic void onMeasure(int widthMeasureSpec, int heightMeasureSpec){   int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);   super.onMeasure(widthMeasureSpec, expandSpec);}

但是发现这样会有问题,当我的gridview重新notify后,计算的高度会出问题,直接用系统自带的view就好了,我们重新计算view的高度

/** * 适配器最外围布局必须是线性布局 重新计算listview的宽高 *  * @param listView */public static void setListViewHeightBasedOnChildren(ListView listView) {   if (listView.getChildCount() > 0) {      // 获取ListView对应的Adapter      ListAdapter listAdapter = listView.getAdapter();      if (listAdapter == null) {         return;      }      int totalHeight = 0;      for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目         View listItem = listAdapter.getView(i, null, listView);         listItem.measure(0, 0); // 计算子项View 的宽高         totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度      }      LinearLayout.LayoutParams params = (LayoutParams) listView.getLayoutParams();      params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));      // listView.getDividerHeight()获取子项间分隔符占用的高度      // params.height最后得到整个ListView完整显示需要的高度      listView.setLayoutParams(params);   }}/** * 适配器最外围布局必须是线性布局 重新计算gridView的宽高 * * @param */public static void setGradeViewHeightBasedOnChildren(GridView gridView, int col) {   double hightcount = Math.ceil((double) gridView.getAdapter().getCount() / (double) col);   int height = 0;
int maxheight = 0;for (int i = 0, len = gridView.getAdapter().getCount(); i <= len; i++) { // listAdapter.getCount()返回数据项的数目   View listItem = gridView.getAdapter().getView(i, null, gridView);   listItem.measure(0, 0); // 计算子项View 的宽高   height = listItem.getMeasuredHeight();   if(maxheight <= height)      maxheight = height;}// 获取gridView的布局参数ViewGroup.LayoutParams params = gridView.getLayoutParams();// 设置高度params.height = (int) (hightcount * maxheight + 30);
// 设置margin ((ViewGroup.MarginLayoutParams) params).setMargins(30, 30, 30, 30); // 设置参数 gridView.setLayoutParams(params);}










0 0
原创粉丝点击