文档章节

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

SuShine
 SuShine
发布于 2015/06/24 13:55
字数 406
阅读 15
收藏 1
点赞 0
评论 0

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

[html]  view plain copy
  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的列表项计算列表的尺寸。实现代码如下: 

[java]  view plain copy
  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.    
  19.         int totalHeight = 0;   
  20.         for (int i = 0, len = listAdapter.getCount(); i < len; i++) {   
  21.             // listAdapter.getCount()返回数据项的数目   
  22.             View listItem = listAdapter.getView(i, null, listView);   
  23.             // 计算子项View 的宽高   
  24.             listItem.measure(00);    
  25.             // 统计所有子项的总高度   
  26.             totalHeight += listItem.getMeasuredHeight();    
  27.         }   
  28.    
  29.         ViewGroup.LayoutParams params = listView.getLayoutParams();   
  30.         params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));   
  31.         // listView.getDividerHeight()获取子项间分隔符占用的高度   
  32.         // params.height最后得到整个ListView完整显示需要的高度   
  33.         listView.setLayoutParams(params);   
  34.     }   
  35. }   
运行结果,OK问题搞定,打完收工  

本文转载自:http://blog.csdn.net/sfshine/article/details/19351469

共有 人打赏支持
SuShine
粉丝 118
博文 436
码字总数 88684
作品 0
青岛
后端工程师
从源码角度分析SrcollView嵌套ListView显示不全的问题

从源码角度分析SrcollView嵌套ListView显示不全的问题 Sunxin's Bolg Sunxin's Github 问题描述 在之前开发的时候会碰到列表滑动布局中ScrollView嵌套ListView的情况,当嵌套了之后发现ListV...

sun_____xin ⋅ 2017/09/02 ⋅ 0

ScrollView嵌套ListView为什么只显示一行?解决方法以及原理

1.问题复现路径。     在使用ScrollView中如果嵌套ListView,则ListView只会显示一行。 2.解决办法,自定义ListView,并重写onMeasure()方法。 3原理解析。 3.1.造成原因     查看L...

键盘走过的日子 ⋅ 01/14 ⋅ 0

Tips_Android中ScrollView嵌套Listview或Gridview(ZZ)

按照android的标准,ScrollView中是不能嵌套具有滑动特性的View的,但是有时如果设计真的有这样做的需要,或者为了更方便简单的实现外观(比如在外在的大布局需要有滑动的特性,并且内部有类...

mstian06 ⋅ 2014/06/26 ⋅ 0

Android仿QQ列表滑动弹出按钮、长按提示、刷新列表

原理: ScrollView(刷新) + ListView(弹出按钮) 说明:由于能力有限,刷新和滑动弹出按钮都是第三方的library(librarypullToRefresh + librarySwipeMenuListView) 我只是整合了一下,需...

MiloMei ⋅ 2015/01/23 ⋅ 12

在ScrollView中嵌套ListView时,ListView只能显示一行多一点

在ScrollView中嵌套ListView时,ListView只能显示一行多一点,如图: 解决方法来自 来自StackOverFlow http://stackoverflow.com/questio ... ing/3495908#3495908 经过验证,简单有效,在l...

开源中国首席体验师 ⋅ 2013/07/17 ⋅ 0

Android ListView与ScrollView冲突的4种解决方案

问题描述 众所周知ListView与ScrollView都具有滚动能力,对于这样的View控件,当ScrollView与ListView相互嵌套会成为一种问题: 问题一:ScrollView与ListView嵌套导致ListView显示不全面 问题...

IamOkay ⋅ 2015/02/04 ⋅ 0

Android面试题:Listview

今日,看到群里朋友发的一部分面试题,决定把这这些面试题的答案写下来,如下: 1、ListView怎么和ScrollView兼容? ok 2、ViewPager无限轮播图片 3、out of memory内存溢出怎么解决 4、三级...

微笑的江豚 ⋅ 2016/06/22 ⋅ 0

Android布局中ScrollView与ListView的冲突的方法

看到网上流行的一种使用方法是 public class Utility { 这个太麻烦了,而且效果又不是很明显。 有人的总结如下: 只要在设置ListView的Adapter后调用此静态方法即可让ListView正确的显示在其...

无鸯 ⋅ 2011/09/06 ⋅ 7

listItem.measure(0, 0) 空指针问题

在android中有时候scrollView需要嵌套listview,当scrollView嵌套listview时,会出现listview显示不全的问题,这时候有很多解决的办法,其中一个类似下面的代码: public void setListViewH...

似水流年0_0 ⋅ 2015/12/14 ⋅ 0

ScrollView嵌套ListView的问题同样适用于gridview

以下文章转自@安卓泡面 在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全。我试过很多种方法,它们各有利弊。 在这里我将会从使用ScrollView嵌套L...

Remix_jx ⋅ 2015/01/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 12分钟前 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 16分钟前 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 19分钟前 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 38分钟前 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 44分钟前 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 45分钟前 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 48分钟前 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 48分钟前 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 55分钟前 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 57分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部