ScrollView 与ListView 一起使用导致的滑动冲突
ScrollView常用来布局一个内容超过当前页面,需要往下滑才能看到完整内容。可以把ScrollView看作是一种特殊的、加长版的LinearLayout,系统在加载布局时其实要知道整个布局的长度,才能将整个页面显示出来。而ListView的item个数是会动态变化的,如果在ScrollView中加入ListView会让系统无法准确加载,导致ListView只显示一行。
以下的方法可以ScrollView和ListView一起使用导致ListView只显示一行的问题。
解决方法
方法一:
根据ListView中Item数量,动态计算出ListView的总高度,使全部item得到显示。部分代码如下:
/**
* 通过ListView Item数量计算出ListView的总高度
*/
public static void setListViewHeight(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(1, 1);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)) + listView.getPaddingTop() + listView.getPaddingBottom();
listView.setLayoutParams(params);
}
方法二:自定义 一个AppListView 继承ListView ,重写里面的onMeasure()方法。
/**
* 如果不设置Integer.MAX_VALUE >> 2,系统默认设置是显示两条
*/
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。