在开发的过程当中,由于手机屏幕的大小的限制,我们经常需要使用滑动的方式,来显示更多的内容。在最近的工作中,遇见一个需求,需要将ListView嵌套到ScrollView中显示。于是乎有了如下布局:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:background="#FFE1FF"
  6. android:orientation="vertical" >
  7. <ScrollView
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent" >
  10. <LinearLayout
  11. android:layout_width="match_parent"
  12. android:layout_height="match_parent" >
  13. <ListView
  14. android:id="@+id/listView1"
  15. android:layout_width="match_parent"
  16. android:layout_height="match_parent"
  17. android:fadingEdge="vertical"
  18. android:fadingEdgeLength="5dp" />
  19. </LinearLayout>
  20. </ScrollView>
  21. </LinearLayout>

运行程序,如下结果,无论你如何调整layout_width,layout_height属性,ListView列表只显示一列!

在查阅的各种文档和资料后,发现在ScrollView中嵌套ListView空间,无法正确的计算ListView的大小,故可以通过代码,根据当前的ListView的列表项计算列表的尺寸。实现代码如下:

  1. public class MainActivity extends Activity {
  2. private ListView listView;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. listView = (ListView) findViewById(R.id.listView1);
  8. String[] adapterData = new String[] { "Afghanistan", "Albania",… … "Bosnia"};
  9. listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,adapterData));
  10. setListViewHeightBasedOnChildren(listView);
  11. }
  12. public void setListViewHeightBasedOnChildren(ListView listView) {
  13. // 获取ListView对应的Adapter
  14. ListAdapter listAdapter = listView.getAdapter();
  15. if (listAdapter == null) {
  16. return;
  17. }
  18. int totalHeight = 0;
  19. for (int i = 0, len = listAdapter.getCount(); i < len; i++) {
  20. // listAdapter.getCount()返回数据项的数目
  21. View listItem = listAdapter.getView(i, null, listView);
  22. // 计算子项View 的宽高
  23. listItem.measure(0, 0);
  24. // 统计所有子项的总高度
  25. totalHeight += listItem.getMeasuredHeight();
  26. }
  27. ViewGroup.LayoutParams params = listView.getLayoutParams();
  28. params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
  29. // listView.getDividerHeight()获取子项间分隔符占用的高度
  30. // params.height最后得到整个ListView完整显示需要的高度
  31. listView.setLayoutParams(params);
  32. }
  33. }

运行结果,OK问题搞定,打完收工!

来源: http://www.cnblogs.com/zhwl/p/3333585.html

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/jeffen/p/6739817.html

ScrollView嵌套ListView只显示一行相关推荐

  1. 日积月累:ScrollView嵌套ListView只显示一行

    在开发的过程当中,由于手机屏幕的大小的限制,我们经常需要使用滑动的方式,来显示更多的内容.在最近的工作中,遇见一个需求,需要将ListView嵌套到ScrollView中显示.于是乎有了如下布局: [ ...

  2. ScrollView 嵌套 ListView 只显示第一行的源码分析

    要带着问题来阅读源码,解惑以满足心中的好奇心,知其然并知其所以然,了解发现 Google 工程师的代码设计原理. 1.猜测是在 onMeasure 的时候,只测量了第一个 item. 在 Measur ...

  3. ScrollView 里面嵌套 listview 使得listview只显示一行问题解决

    2019独角兽企业重金招聘Python工程师标准>>> 方法一,最直接的方法就是删除 ScrollView控件 方法二:写个工具类动态设置listview的高度 public cla ...

  4. Android在ListView中嵌套一个GridView时只显示一行的原因及解决方法

    在之前的编程里,我还没有遇到过要在一个ListView中嵌套一个GridView或是在一个GridView中嵌套一个ListView.所以今天事儿来了!我花了一将近3个小时,找到了为什么我在一个Lis ...

  5. Android ScrollView嵌套GridView导致GridView只显示一行item

    Android ScrollView嵌套GridView导致GridView只显示一行item Android ScrollView在嵌套GridView时候,会导致一个问题发生:GridView只显 ...

  6. android中ScrollView嵌套ListView或GridView显示位置问题

    Android中ScrollView中嵌套ListView或GridView时在开始进入界面时总是显示中间位置,开头的位置显示不出来.这种情况下只需要在ScrollView的父控件中添加以下两行代码即 ...

  7. ScrollView嵌套ListView后,进入页面不从顶部开始显示的问题解决

    ScrollView嵌套ListView后,进入页面不从顶部开始显示的问题解决 首先,正常情况下,如果在ScrollView里嵌套ListView后,会发现ListView只显示1条数据 那么,为了解 ...

  8. listview嵌套listview,子listview只显示一个item问题

    背景: 我在做项目的时候准备用listview嵌套一个listview,但是发现,子listview只显示一条数据,于是,一猜又是计算高度出问题了. 处理办法,当然是和scrollview嵌套list ...

  9. 四种方案解决ScrollView嵌套ListView问题

    在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollView嵌套ListView结 ...

最新文章

  1. php怎么批量转码,网站文件批量转码_PHP教程
  2. JS的Document属性和方法
  3. 焦点轮播图——myfocus焦点图库
  4. 教你如何用阿里canal
  5. (三)数字判断大小语句
  6. Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)
  7. jQuery 源码解析一:jQuery 类库整体架构设计解析
  8. 实例源码--Android捕鱼达人经典游戏
  9. andorid月总结
  10. java递归用for实现_用java实现的经典递归算法
  11. 精通javascript学习笔记
  12. word里面如何插入图片
  13. [RK3288][Android6.0] Audio中的HW Params设置流程
  14. 快速清除系统中的木马病毒
  15. 典型的FPGA芯片有哪些,看完这篇文章就知道了
  16. Mac——快速锁定屏幕
  17. nexus学习 五、搭建阿里云代理
  18. 计算机课设微程序最大值,计算机组成原理课程设计(微程序)报告
  19. Android开发使用SurfaceView和Mediaplayer播放网络视频(功能齐全)
  20. 杭州银行批量交易平台(HZBAT)技术内幕

热门文章

  1. php ffmpeg
  2. Mybatis 实现关联表查询
  3. 华南理工大学2016年数学分析高等代数考研试题参考解答
  4. 算法导论笔记:32字符串匹配算法
  5. 设计模式 经典书籍必备推荐
  6. android note2
  7. sofa-pbrpc框架的简单使用
  8. JavaScript学习(二十五)—实现无缝滚动
  9. pin码是什么意思?
  10. 为什么越来越多的人喜欢自驾游?