ScrollView 嵌入Listview,当Listview中的Textview多余一行,高度如何重新计算
来源:互联网 发布:宝马5系改装轮毂数据 编辑:程序博客网 时间:2024/05/18 17:27
网上也有很多例子,简单总结下项目中遇到的情况
1 如果Listview的Item高度是固定的,也就是说,每一个listItem的高度都是一模一样的,那么有如下计算方法
public int setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return 0;
}
int totalHeight = 0;
System.out.println("listAdapter.getCount(): " + listAdapter.getCount());
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
System.out.println("listView.totalHeight: " + totalHeight + " listItem.getMeasuredHeight(): " + listItem.getMeasuredHeight());
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
System.out.println("listView.getDividerHeight(): " + listView.getDividerHeight());
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
return params.height;
}
这个方法有一个坏处就是每次都会多执行一遍Adapter中的getView函数,效率不高,优化如下(也是针对固定listitem的高度):
public void setListViewHeight() {
try {
ListAdapter listAdapter = commentListView.getAdapter();
if (listAdapter == null) {
return ;
}
int totalHeight = 0;
int count = listAdapter.getCount();
DebugUtils.printInfo(TAG, "listAdapter.getCount(): " + count);
View listItem = listAdapter.getView(0, null, commentListView);
listItem.measure(0, 0);
int height = listItem.getMeasuredHeight();
totalHeight = count * height;
ViewGroup.LayoutParams params = commentListView.getLayoutParams();
DebugUtils.printInfo(TAG, "listView.getDividerHeight(): " + commentListView.getDividerHeight());
params.height = totalHeight + (commentListView.getDividerHeight() * (count - 1));
DebugUtils.printInfo(TAG, "初始化时listviewParams.height" + params.height);
commentListView.setLayoutParams(params);
} catch (Exception e) {
e.printStackTrace();
}
}
2 如果Listview的Item高度是动态的,例如包含Textview并且超过一行的情况下,如果继续用以上两种方法,那么计算的只是一行TextView的高度
所以这里给了一个很简单的方法,如下:
// 动态改变listView的高度 ,解决TextView超过一行,高度只计算一行的问题
public int setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return 0;
}
int totalHeight = 0;
int listViewWidth = ConstValue.screenWidth - Tool.convertDpToPx(this, 12);//listView在布局时的宽度 ,screenWidth - 左右的padding - 左右的margin
int widthSpec = View.MeasureSpec.makeMeasureSpec(listViewWidth, View.MeasureSpec.AT_MOST);
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(widthSpec, 0);
int itemHeight = listItem.getMeasuredHeight();
totalHeight += itemHeight;
System.out.println("listView.totalHeight: " + totalHeight + " itemHeight: " + itemHeight);
}
int historyHeight = totalHeight + (listView.getDividerHeight() * listAdapter.getCount() - 1);
System.out.println("listViewHeight = " + historyHeight);
return historyHeight;
}
这个方法没法优化了,本来就不是固定的高度。
- ScrollView 嵌入Listview,当Listview中的Textview多余一行,高度如何重新计算
- scroll嵌套多个listview,listview中的TextView超过一行,只计算 一行高度
- scrollview中嵌入listview动态计算listview的高度
- android ScrollView 里嵌套listview listview 重新计算高度
- 重新计算Listview高度
- 重新计算listview高度
- ScrollView嵌套ListView高度计算
- 重新计算ListView的高度
- ListView(ScrollView)嵌套ListView、GridView显示不全,内容大于一行计算的高度不正确的解决办法
- 关于ScrollView中嵌套listView,textView存在多行时,listView高度计算不正确。
- ScrollView中嵌入Listview,当item高度不一样的时候,item展示不全问题
- ScrollView中嵌套ListView,TextView只显示一行的高度解决方案
- android中scroll中的listview高度重新计算
- 如何在ScrollView中如何嵌入ListView
- 如何在ScrollView 中如何嵌入ListView
- 如何在ScrollView中如何嵌入ListView
- ScrollView嵌套ListView只显示一行之计算的高度不正确的解决办法
- ScrollView嵌套ListView,gridView只显示一行解决方案 (以及计算显示高度错误问题)
- Linux下cpu使用率load average的简单理解
- 每天一个linux命令之top命令
- spring框架学习(二)依赖注入
- I/O多路转接之select
- MongoDB常用操作命令大全
- ScrollView 嵌入Listview,当Listview中的Textview多余一行,高度如何重新计算
- Floyd算法详讲
- <oracle.adf.view> <SimpleSelectOneRenderer> <_getSelectedIndex> <Could not find selected item matchi
- 【Linux】linux定时清除N天之前的文件,一般用于清除日志文件
- 使用 MaxScale实现读写分离
- 学习转载系列-《自定义View基础-坐标系》
- BZOJ1634: [Usaco2007 Jan]Protecting the Flowers 护花
- stdio.h头文件包含的函数有哪些?
- 使用Xcode 7进行单元测试