ListView或GridView与ScrollView共存,高度显示问题
2013-08-29 14:48
393 查看
自定义ListView(或GridView),重写里面的OnMeasure()方法重新计算高度
public class MyListView extends ListView {
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpaec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpaec);
}
}
计算listView高度(各项不等高情况):
/**
* 动态设置ListView高度(各表项不等高)
*
* @param listView
*/
private void setListViewHeightBasedOnItems(ListView listView) {
ListAdapter listAdapter = listView.getAdapter(); // 获取适配器
if (listAdapter == null) {
return;
}
int count = listAdapter.getCount(); // item数量
int totalHeight = 0;
for (int i = 0; i < count; i++) {
View item = listAdapter.getView(i, null, listView);
item.measure(0, 0);
int height = item.getMeasuredHeight();
totalHeight += height;
item = null;
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (count - 1)); // 计算ListView高度
listView.setLayoutParams(params); // 设置ListView高度
}
若listView各项等高,可不重新定义listView,直接在初始话listView 时计算高度,亦可实现相应的效果:
/**
* 动态设置ListView高度(各列表项等高)
*
* @param listView
*/
private void setListViewHeightBasedOnItems2(ListView listView) {
ListAdapter listAdapter = listView.getAdapter(); // 获取适配器
if (listAdapter == null) {
return;
}
int count = listAdapter.getCount(); // item数量
View item0 = listAdapter.getView(0, null, listView); // 选取首个item
item0.measure(0, 0);
int itemHeight = item0.getMeasuredHeight(); // 获取首个列表项高度
int dividerHeight = listView.getDividerHeight(); // 获取分割线高度
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = (itemHeight + dividerHeight) * count - dividerHeight; // 计算ListView高度
listView.setLayoutParams(params); // 设置ListView高度
}
public class MyListView extends ListView {
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpaec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpaec);
}
}
计算listView高度(各项不等高情况):
/**
* 动态设置ListView高度(各表项不等高)
*
* @param listView
*/
private void setListViewHeightBasedOnItems(ListView listView) {
ListAdapter listAdapter = listView.getAdapter(); // 获取适配器
if (listAdapter == null) {
return;
}
int count = listAdapter.getCount(); // item数量
int totalHeight = 0;
for (int i = 0; i < count; i++) {
View item = listAdapter.getView(i, null, listView);
item.measure(0, 0);
int height = item.getMeasuredHeight();
totalHeight += height;
item = null;
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (count - 1)); // 计算ListView高度
listView.setLayoutParams(params); // 设置ListView高度
}
若listView各项等高,可不重新定义listView,直接在初始话listView 时计算高度,亦可实现相应的效果:
/**
* 动态设置ListView高度(各列表项等高)
*
* @param listView
*/
private void setListViewHeightBasedOnItems2(ListView listView) {
ListAdapter listAdapter = listView.getAdapter(); // 获取适配器
if (listAdapter == null) {
return;
}
int count = listAdapter.getCount(); // item数量
View item0 = listAdapter.getView(0, null, listView); // 选取首个item
item0.measure(0, 0);
int itemHeight = item0.getMeasuredHeight(); // 获取首个列表项高度
int dividerHeight = listView.getDividerHeight(); // 获取分割线高度
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = (itemHeight + dividerHeight) * count - dividerHeight; // 计算ListView高度
listView.setLayoutParams(params); // 设置ListView高度
}
相关文章推荐
- scrollview同时嵌套listview和gridview 显示高度问题【只显示一行】
- 解决GridView,ListView嵌套在ScrollView时只显示一行高度的问题
- ScrollView嵌套ListView,gridView只显示一行解决方案 (以及计算显示高度错误问题)
- 解决GridView,ListView嵌套在ScrollView时只显示一行高度的问题
- ScrollView嵌套listview、gradview等 嵌套式高度显示问题的解决办法
- ScrollView中嵌套ListView或者GridView时的滑动冲突 || ListView中嵌套GridView,GridView只显示一行的问题解决
- 完美解决ListView, GridView在ScrollView显示不完全问题
- ScrollView中嵌套GridView,Listview不显示全部item的问题
- scrollview中嵌套listview,gridview时高度问题
- 关于ScrollView嵌套ListView或GridView只显示一行的问题
- ListView或GridView嵌入ScrollView中时,只显示一个Item并且默认将此Item置顶的问题解决办法
- 【Android基础学习】动态设置 listView的高度,解决scrollView中嵌套listview时显示不全的问题
- 深入理解布局容器绘制,解决ListView嵌套listview,或者ScrollView嵌套listview,gridview的高度问题解决方法
- 解决ScrollView下嵌套ListView、GridView显示不全的问题
- ScrollView中嵌套GridView,Listview不显示全部item的问题
- ListView(ScrollView)嵌套ListView、GridView显示不全,内容大于一行计算的高度不正确的解决办法
- 解决ScrollView下嵌套ListView、GridView显示不全的问题
- 关于ScrollView嵌套Listview,GridView只显示一条数据的问题
- 解决ScrollView 与ListView共存显示不完全的问题
- ScrollView 与 LiswView 共存时显示高度计算问题