ScrollView与ListView合用(正确计算Listview的高度)的问题解决

 更新时间:2013年05月22日 15:14:13   作者:  
最近做项目中用到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); 

相关文章

  • Android线程池控制并发数多线程下载

    Android线程池控制并发数多线程下载

    这篇文章主要为大家详细介绍了Android线程池控制并发数多线程下载,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Android中获取apk安装包信息的方法

    Android中获取apk安装包信息的方法

    这篇文章主要介绍了Android中获取apk安装包信息的方法,如图标、应用包名、版本、安装路径等,需要的朋友可以参考下
    2014-05-05
  • Android编程实现自定义Tab选项卡功能示例

    Android编程实现自定义Tab选项卡功能示例

    这篇文章主要介绍了Android编程实现自定义Tab选项卡功能,结合完整实例形式分析了Android自定义tab选项卡的遍历、设置及属性操作相关技巧,需要的朋友可以参考下
    2017-02-02
  • Android中一个应用实现多个图标的几种方式

    Android中一个应用实现多个图标的几种方式

    这篇文章主要给大家介绍了在Android中一个应用如何实现多个图标的几种方式,其中包括了多Activity + intent-filter方式、activity-alias方式以及网页标签-添加快捷方式,分别给出了详细的示例代码,需要的朋友可以参考借鉴。
    2017-05-05
  • Android ExpandableListView展开列表控件使用实例

    Android ExpandableListView展开列表控件使用实例

    这篇文章主要介绍了Android ExpandableListView展开列表控件使用实例,本文实现了一个类似手机QQ好友列表的界面效果,需要的朋友可以参考下
    2014-07-07
  • Android编程开发录音和播放录音简单示例

    Android编程开发录音和播放录音简单示例

    这篇文章主要介绍了Android编程开发录音和播放录音的方法,结合实例形式分析了Android多媒体开发中音频操作的相关技巧,需要的朋友可以参考下
    2016-08-08
  • android仿iphone滚轮控件显示效果

    android仿iphone滚轮控件显示效果

    这篇文章主要为大家详细介绍了android仿iphone滚轮控件显示效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Android实现个性化的进度条

    Android实现个性化的进度条

    这篇文章主要介绍了Android实现个性化的进度条 的相关资料,需要的朋友可以参考下
    2016-07-07
  • 为Retrofit统一添加post请求的默认参数的方法

    为Retrofit统一添加post请求的默认参数的方法

    这篇文章主要介绍了为Retrofit统一添加post请求的默认参数的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Kotlin基础学习之Deprecated与Suppress注解使用

    Kotlin基础学习之Deprecated与Suppress注解使用

    这篇文章主要给大家介绍了关于Kotlin基础学习之Deprecated与Suppress注解使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Kotlin具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08

最新评论