使用Xlistview时TextView自动换行或ScrollView嵌套Listview高度显示不全

本文介绍了在Android应用开发中解决ScrollView嵌套ListView高度显示不全的问题,并提供了一种简单的实现TextView自动换行的方法。同时探讨了这种方法对于Xlistview加载数据的影响。

使用Xlistview时TextView自动换行或ScrollView嵌套Listview高度显示不全

在最近的项目中用到ScrollView嵌套Listview。这样高度会显示不全。其实网上很多这个解决办法,只需在listview.setAdapter(adapter);后面添加一段代码


/* 动态设置ListView的高度
* @param listView
*/
public static void setListViewHeightBasedOnChildren(ListView listView) {
if (listView == null) return;
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
for (int i = 0, count = listAdapter.getCount(); i < count; i++) {
View listItem = listAdapter.getView(i, null, listView);
////计算子项View 的宽高
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight() + listView.getDividerHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight;
listView.setLayoutParams(params);
}
注意必须实在listview.setAdapter(adapter);才生效。
之后又出现一个问题,产品要求ListView中的Textview需要适应自动换行。尝试了很多办法,先写一下最简单的一种。只需重写@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}

重写onMeasure后,listview在加载数据是getview()方法会频繁执行,慎用。
之后有一个布局需要用到下拉刷新和上拉加载,于是我就又使用了之前修改后的Xlistview。问题出现了,在加载数据时Xlistview只显示一部分,准确的说只显示一页,不能滚动。难道重写onMeasure()发那个发还会有影响吗?
于是我将onMeasure注释掉发现数据完全加载了,
我打印发现int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
expandSpec和heightMeasureSpec是不一样的。一脸懵逼中,希望真正懂得人,留言说一下为什么不一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值