ScrollView和ListView一起使用 文本换行getMeasuredHeight等问题的解决
2014-03-31 15:01
435 查看
首先,ListView不能直接用,要自定义一个,然后重写onMeasure()方法:
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;
public class MyListView extends ListView {
public MyListView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public MyListView(Context context,AttributeSet as) {
super(context,as);
// TODO Auto-generated constructor stub
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
第二步:写个计算listView每个Item的方法:
public void setListViewHeightBasedOnChildren(ListView listView) {
// 获取ListView对应的Adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
第三步:listview添加适配器后设置高度即可:
listView.setAdapter(adapter);
new ListViewUtil().setListViewHeightBasedOnChildren(listView);
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;
public class MyListView extends ListView {
public MyListView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public MyListView(Context context,AttributeSet as) {
super(context,as);
// TODO Auto-generated constructor stub
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
第二步:写个计算listView每个Item的方法:
public void setListViewHeightBasedOnChildren(ListView listView) {
// 获取ListView对应的Adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
第三步:listview添加适配器后设置高度即可:
listView.setAdapter(adapter);
new ListViewUtil().setListViewHeightBasedOnChildren(listView);
相关文章推荐
- ScrollView和ListView一起使用 文本换行getMeasuredHeight等问题的解
- ScrollView和ListView一起使用 文本换行getMeasuredHeight等问题的解
- ScrollView和ListView一起使用,解决ListView只显示一行问题!
- Android ScrollView与ListView一起(嵌套)使用解决ListView自动滚动的几点方案
- [Android]解决onCreate里面view.getHeight()为0、 getMeasuredHeight() 也是0 的问题
- 解决Android使用ScrollView和 ListView时底部空间随着输入法向上移动的问题
- 关于Scrollview嵌套ListView,使用setListViewHeightBasedOnChildren(ListView listView) ,在小米手机上崩溃问题
- 完美解决viewpager跟其他类型的listview 或 gridview一起使用时,滑动冲突问题
- 解决listview与scrollview结合使用时出现的问题
- 解决ListView和ScrollView同时使用时滑动的冲突问题
- ScrollView和ListView一起使用时的问题
- ScrollView和ListView综合使用出现的问题解决方法
- Android ScrollView 和ListView 一起使用的问题汇总
- 解决listview与scrollview结合使用时出现的问题
- Android ScrollView 和ListView 一起使用的问题汇总
- 解决listview与scrollview结合使用时出现的问题
- ScrollView和ListView一起使用的问题
- ScrollView和RecyclerView嵌套使用显示不全问题解决
- Android 解决ListView 和 ScrollView 共存冲突的问题
- ScrollView与ListView合用(正确计算Listview的高度)的问题解决