关于ListView和ScrollView冲突问题的解决方案
2016-04-09 23:57
337 查看
有时,我们会遇到这样的情况:在一个布局里既有ListView,又有ScrollView,且ScrollView包含ListView,这是会出现数据显示不全,最多可能只显示1~2条的情况。(注:通常,ScrollView里边包含列表视图或网格视图时,也都会出现冲突问题。)
该如何解决这个问题呢?
首先,要知道ScrollView的关键点--滚动视图,只能容纳一个子控件,通常放线性布局。
这里,给出2种解决方案:
第一种:
1、重写ListView的onMeasure函数
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int specHeight = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, specHeight);
}
2、解决默认显示listView顶部的问题
mListView.setFocusable(false);
这是代码量最少的一种处理方式,用的是自定义的listView方式,复写onMeasure(),
重新计算了高度。
第二种:
在设置Adapter后,重新调用下面的方法计算ListView的高度。
注:该方法要求子项根布局必须是线性布局。
关键代码:
public void setListViewHeight(ListView listView){
ListAdapter adapter = listView.getAdapter();
int totalHeight = 0;
for(int i=0; i<adapter.getCount(); i++){
View listItem = adapter.getView(i, null, listView);
listItem.measure(0, 0); //重新计算子项的宽高
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listItem.getLayoutParams();
params.height = totalHeight + (listItem.getDividerHeight() * (adapter.getCount()-1));
listView.setLayoutParams(params);
}
写一个方法,用来接收列表视图控件,该方法里要做的事:将高度重新计算一下,并将其高度设置给列表视图,获取列表视图的适配器。
该如何解决这个问题呢?
首先,要知道ScrollView的关键点--滚动视图,只能容纳一个子控件,通常放线性布局。
这里,给出2种解决方案:
第一种:
1、重写ListView的onMeasure函数
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int specHeight = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, specHeight);
}
2、解决默认显示listView顶部的问题
mListView.setFocusable(false);
这是代码量最少的一种处理方式,用的是自定义的listView方式,复写onMeasure(),
重新计算了高度。
第二种:
在设置Adapter后,重新调用下面的方法计算ListView的高度。
注:该方法要求子项根布局必须是线性布局。
关键代码:
public void setListViewHeight(ListView listView){
ListAdapter adapter = listView.getAdapter();
int totalHeight = 0;
for(int i=0; i<adapter.getCount(); i++){
View listItem = adapter.getView(i, null, listView);
listItem.measure(0, 0); //重新计算子项的宽高
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listItem.getLayoutParams();
params.height = totalHeight + (listItem.getDividerHeight() * (adapter.getCount()-1));
listView.setLayoutParams(params);
}
写一个方法,用来接收列表视图控件,该方法里要做的事:将高度重新计算一下,并将其高度设置给列表视图,获取列表视图的适配器。
相关文章推荐
- PHP 对目录的操作
- [置顶] merge k sorted lists
- NY1239 引水工程
- 在Android value中添加颜色resource文件
- windows客户端开发--改变visual studio配色方案
- 杭电ACM题1007
- Android 播放视频(四)VideoView全屏视频播放
- windows客户端开发--改变visual studio配色方案
- JDBC+MYSQL初始学习
- Ubuntu之后的Debian折腾
- Android 判断SIM卡属于哪个移动运营商
- RESTful Webservice 框架搭建步骤
- D. Number of Parallelograms
- CentOS 7安装nginx 端口代理配置
- NSString类的相关用法
- 在MAC下基于Openfire和Spark的XMPP协议实现
- Android性能优化
- Leetcode #38. Count and Say 数数报数 解题报告
- KNN算法的感受 2
- Example015实现html中checkbox的全选和反选(2)