Android ListView自适应高度和ScrollView冲突解决 [有效]
来源:互联网 发布:五笔拼音输入法mac版 编辑:程序博客网 时间:2024/05/21 15:40
参考1:http://stackoverflow.com/questions/2312683/calculate-the-size-of-a-list-view-or-how-to-tell-it-to-fully-expand
参考2:http://stackoverflow.com/questions/15039913/android-how-to-measure-total-height-of-listview
在ScrollView中嵌套使用ListView,ListView只会显示一行到两行的数据。起初我以为是样式的问题,一直在对XML文件的样式进行尝试性设置,但始终得不到想要的效果。后来在网上查了查,ScrollView和ListView两个View都有滚动的效果,在嵌套使用时起了冲突,一般不建议两者套用。
下面说说具体解决方案。方案的主要思路就是根据ListView子项重置其高度。
首先,ListView不能直接用,要自定义一个,然后重写onMeasure()方法:
1 import android.content.Context; 2 import android.util.AttributeSet; 3 import android.widget.ListView; 4 5 public class MyListView extends ListView { 6 7 public MyListView(Context context) { 8 super(context); 9 }10 11 public MyListView(Context context, AttributeSet attrs) {12 super(context, attrs);13 }14 15 public MyListView(Context context, AttributeSet attrs, int defStyle) {16 super(context, attrs, defStyle);17 }18 19 @Override20 public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {21 int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,22 MeasureSpec.AT_MOST);23 super.onMeasure(widthMeasureSpec, expandSpec);24 }25 26 }
第二步:写个计算listView每个Item的方法:
1 public void setListViewHeightBasedOnChildren(ListView listView) { 2 3 // 获取ListView对应的Adapter 4 5 ListAdapter listAdapter = listView.getAdapter(); 6 7 if (listAdapter == null) { 8 9 return;10 11 }12 13 int totalHeight = 0;14 15 for (int i = 0; i < listAdapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目16 17 View listItem = listAdapter.getView(i, null, listView);18 19 listItem.measure(0, 0); // 计算子项View 的宽高20 21 totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度22 23 }24 25 ViewGroup.LayoutParams params = listView.getLayoutParams();26 27 params.height = totalHeight28 + (listView.getDividerHeight() * (listAdapter.getCount() - 1));29 30 // listView.getDividerHeight()获取子项间分隔符占用的高度31 32 // params.height最后得到整个ListView完整显示需要的高度33 34 listView.setLayoutParams(params);35 36 }
在设置LIstView的Adapter后调用此方法便可。
但是要注意的是,子ListView的每个Item必须是LinearLayout,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。
1 listView.setAdapter(adapter); 2 setListViewHeightBasedOnChildren(listView);
谢谢作者
0 0
- Android ListView自适应高度和ScrollView冲突解决 [有效]
- Android ListView高度自适应和ScrollView冲突解决
- Android中ListVIew高度自适应,解决ScrollView冲突问题以及Android表格
- 计算Listview的高度解决Scrollview和listview的冲突
- Android:解决ScrollView 和 ListView 的冲突
- ScrollView和ListView冲突解决
- ScrollView和listView冲突解决
- android ListView 嵌套scrollView 自适应高度
- android解决listview与scrollview的冲突、自定义listview的高度以及上下拉刷新
- Android 解决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 共存冲突的问题
- C#配置文件中的与数据库有关的字符串
- PHP cURL 应用(入门详解教程)
- java(4)------流程控制语句(if,switch,for,while,do-while)
- 分割字符串为回文串(每一个子串都是回文串)
- A. Round House
- Android ListView自适应高度和ScrollView冲突解决 [有效]
- 一些常用快捷键
- 欢迎使用CSDN-markdown编辑器
- Android病毒查杀原理
- poj 1179 Polygon(化环为直+区间dp)
- 【Unity3d】如何绘制椭圆
- Android开发用MyEclipse作为服务器端访问MySQL数据库,并把某张表解析成xml格式输出到浏览器,客户端解析获取xml数据
- 联想小新air13触摸屏失灵
- python列表详解