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


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

@Override
public 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);}










  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android西红柿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值