ScrollView+ListView滚动冲突,没有滑动效果 解决办法
2016-12-10 00:00
344 查看
问题背景
今天做个界面需要在整个布局都要滚动的基础上添加一个ListView元素,整个布局滚动当然用ScrollView。但是在ScrollView+ListView的布局画好后,发现整个界面都无法滚动,而且ListView只显示了第一条元素。查看布局提示:The vertically scrolling ScrollView should not contain another vertically scrolling widget (ListView)。
问题分析:
由上面那个提示可以看到,正常情况下ScrollView下是不允许再包含一个可滑动的View的,为什么呢?首先要了解ScrollView的工作原理,我们常用它来布局一个内容超过当前页面,需要往下滑才能看到完整内容。
在这里,我们可以把ScrollView看作是一种特殊的、加长版的LinearLayout(虽然它的布局不一定是线性的,但为了便于理解我们暂且这样看),加长?有多长?
系统在加载布局时其实要知道整个布局的长度,也就是上面加长后的长度,才能将整个页面显示出来。而ListView我们知道,item个数是会动态变化的,如果在ScrollView中加入ListView会让系统无法准确加载,导致了我们开始遇到的那种情况。
查询很多资料后,得到了这个解决办法:
一种解决办法:
有网友试过,将ListView的layout_height设置为一个定值,比如说400dp,就可以有滑动的效果。但是ListView只能显示部分元素,这不是我们想要的结果。
所以就需要一种方法可以根据ListView中Item数量,动态设置ListView的height,使全部item得到显示。
最终解决方法:
/** * scrollview与listview合用会出现listview只显示一行多点。此方法是为了定死listview的高度就不会出现以上状况 * 算出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); }
拭心记于2015/5/27 http://blog.csdn.net/u011240877
相关文章推荐
- ScrollView+ListView滚动冲突,没有滑动效果 解决办法
- ScrollView+ListView滚动冲突,没有滑动效果 解决办法
- ScrollView+ListView滚动冲突,没有滑动效果 解决办法
- 使用NestedScrollView+ViewPager+RecyclerView+SmartRefreshLayout打造酷炫下拉视差效果并解决各种滑动冲突
- 安卓解决viewPager+scrollView+listView滑动冲突的问题
- Android HorizontalScrollView 水平滑动 里面放listView 解决滑动冲突
- 解决HorizontalScrollView和ListView滑动冲突
- 使用NestedScrollView+ViewPager+RecyclerView+SmartRefreshLayout打造酷炫下拉视差效果并解决各种滑动冲突
- 完美解决HorizontalScrollView与ListView滑动事件冲突
- Android实现 ScrollView + ListView无滚动条滚动 解决2者间的冲突
- Android ScrollView中嵌套ListView,滑动冲突问题的解决
- 关于listview的item中如果有textview,listview点击item没有效果的解决办法
- Android滑动冲突解决方式(下拉刷新上拉加载更多,适配RecyclerView/ListView/ScrollView)
- HorizontalScrollView 中嵌套 viewpager滑动冲突的解决
- 解决viewpager和listview滑动冲突
- ListView 添加viewPager为header时,viewPager滑动失去焦点的解决办法
- 完美解决ListView和ViewPager的滑动冲突
- IOS8下的UIScrollView有子控件时滑动经常不能滚动解决办法
- android ScrollView与ListView,GridView滑动冲突
- ListView 添加viewPager为header时,viewPager滑动失去焦点的解决办法