ScrollView和ListView一起用时会冲突,解决办法_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > ScrollView和ListView一起用时会冲突,解决办法

ScrollView和ListView一起用时会冲突,解决办法

 2013/11/2 17:19:06  yksnow  博客园  我要评论(0)
  • 摘要:在很多情况下,ScrollView中要嵌套一个listView,但是由于两者都是滑动的,所以貌似在一起用不是很方便,这需要ListView重新测量自己的高度,具体方法如下:第一步:要自定义一个listView,重新写里边的onMeasure()方法;@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){intexpandSpec=MeasureSpec.makeMeasureSpec(Integer
  • 标签:解决办法 一起 解决 view list

在很多情况下,ScrollView中要嵌套一个listView,但是由于两者都是滑动的,所以貌似在一起用不是很方便,这需要ListView重新测量自己的高度,具体方法如下:

第一步:要自定义一个listView,重新写里边的onMeasure()方法;

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

第二步:写个计算listView每个Item的方法;

public void setListViewHeightBasedOnChildren(ListView listView) {

 

  // 获取ListView对应的Adapter

  ListAdapter listAdapter = listView.getAdapter();

  if (listAdapter == null) {

   return;

  }

  int totalHeight = 0;

  for (int i = 0; i < listAdapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目

   View listItem = listAdapter.getView(i, null, listView);

   listItem.measure(0, 0); // 计算子项View 的宽高

   totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度

  }

  ViewGroup.LayoutParams params = listView.getLayoutParams();

  params.height = totalHeight
    + (listView.getDividerHeight() * (listAdapter.getCount() - 1));

  // listView.getDividerHeight()获取子项间分隔符占用的高度

  // params.height最后得到整个ListView完整显示需要的高度

  listView.setLayoutParams(params);

 }

第三步:listview添加适配器后别忘了设置高度;

listView.setAdapter(adapter);  
new ListViewUtil().setListViewHeightBasedOnChildren(listView);

 

 

摘自:脚本之家。

上一篇: 日本研出神经系统相机 可记录用户感兴趣的事物 下一篇: 没有下一篇了!
发表评论
用户名: 匿名