简单函数解决ListView和ScrollView冲突问题
来源:互联网 发布:灰度图像轮廓提取算法 编辑:程序博客网 时间:2024/06/03 05:09
最近开发中遇到一个问题,就是ScrollView和ListView不能并存的问题。
有一个很长的页面(超出了手机的屏幕),上面有许多的内容。一般情况下我们会将这些控件放置在ScrollView中,当超出屏幕范围时,ScrollView会自动为我们加上垂直滚动条。但是ListView控件本身也会根据屏幕大小自动添加垂直滚动条,所以两者在一起的时候会造成冲突。
一般表现为ListView无法正常展示全部数据,只能看到一到两个条目,如下图所示。
官方API也建议不要将两者一起使用,但是我们确实有这样的需求怎么办呢。
仔细观察上图可以发现ListView 没有展示完全,原因是ScrollView没能正确计算出ListView所在布局的高度。我们可以手动计算出ListView的高度,然后改变它所在布局的高度。这样ScrollView就能正常显示了。
函数代码如下:
public void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter(); //取得listview绑定的适配器
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); //测量
totalHeight += listItem.getMeasuredHeight(); //将所有子项的高度进行叠加
}
ViewGroup.LayoutParams params = listView.getLayoutParams(); //取得listview所在布局的参数
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount()));
listView.setLayoutParams(params); //改变listview所在布局的参数
}
通过测试非常简单有效,基本达到预期效果,如图:
不足之处:由于手动设置了ListView所在布局的高度,当ListView高度发生变化时,如删除了一条数据。ScrollView不会自动改变高度,控件占据的位置依然存在,如图。
接下来我们将介绍另外一种更为好用的解决方法,参见:
自定义控件解决GridView和ScrollView冲突
参考资料:Stack Overflow上的一篇帖子
原文链接:http://www.67tgb.com/?p=470
欢迎访问:望月听涛
- 简单函数解决ListView和ScrollView冲突问题
- 解决ListView,GrindView和ScrollView冲突问题
- 解决 ScrollView嵌套ListView listview的冲突问题 ---简单粗暴
- ScrollView和ListView冲突解决
- ScrollView和listView冲突解决
- 简单解决ScrollView和ListView冲突不兼容问题
- listview 和scrollview冲突问题
- Android 解决ListView 和 ScrollView 共存冲突的问题
- Android 解决ListView 和 ScrollView 共存冲突的问题
- Android 解决ListView 和 ScrollView 共存冲突的问题
- Android 解决ListView 和 ScrollView 共存冲突的问题
- Android 解决ListView 和 ScrollView 共存冲突的问题
- Android 解决ListView 和 ScrollView 共存冲突的问题
- Android 解决ListView 和 ScrollView 共存冲突的问题
- Android 解决ListView 和 ScrollView 共存冲突的问题
- 关于处理解决ListView 和 ScrollView 共存冲突的问题。
- Android 解决ListView 和 ScrollView 共存冲突的问题
- Android 解决ListView 和 ScrollView 共存冲突的问题
- ie下调整图片长宽的问题
- 用C++实现锁的自动释放
- vim中缩进的设置以及将tab转换成空格 .
- Linux命令系列之(一)---控制符
- Java IO: Pipes
- 简单函数解决ListView和ScrollView冲突问题
- c/c++/vc非技术问题
- 'O_BINARY' undeclared (first use in this function)
- java io InputStream Reader
- DOM study notes
- ROSE操作指南
- Linux下的第一个Python程序,谨作纪念
- 什么是可重入函数和不可重入函数
- linux下获取时间的若干函数